diff --git a/.github/workflows/update-openapi.yml b/.github/workflows/update-openapi.yml new file mode 100644 index 000000000..b164b545d --- /dev/null +++ b/.github/workflows/update-openapi.yml @@ -0,0 +1,83 @@ +name: Update OpenAPI Specification + +on: + workflow_dispatch: +jobs: + update-openapi: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Fetch OpenAPI specification + run: | + curl -s https://api.vapi.ai/api-json > temp-openapi.json + + - name: Verify JSON validity + run: | + cat temp-openapi.json | jq . > /dev/null + if [ $? -ne 0 ]; then + echo "Error: Invalid JSON received from API endpoint" + exit 1 + fi + mv temp-openapi.json ./fern/apis/api/openapi.json + + - name: Check for changes + id: check_changes + run: | + if git diff --quiet ./fern/apis/api/openapi.json; then + echo "No changes detected in OpenAPI specification" + echo "changes_detected=false" >> $GITHUB_OUTPUT + else + echo "Changes detected in OpenAPI specification" + echo "changes_detected=true" >> $GITHUB_OUTPUT + fi + + - name: Setup GitHub CLI + id: setup_cli + if: steps.check_changes.outputs.changes_detected == 'true' + run: | + # Create timestamp for unique branch name + TIMESTAMP=$(date +%Y%m%d%H%M%S) + BRANCH_NAME="update-openapi-spec-${TIMESTAMP}" + + # Setup branch for changes + git config --global user.name "GitHub Actions" + git config --global user.email "actions@github.com" + + # Create new branch with timestamp + git checkout -b $BRANCH_NAME + git add ./fern/apis/api/openapi.json + git commit -m "chore: update OpenAPI specification" + git push -u origin $BRANCH_NAME + + # Store branch name for PR creation + echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT + + - name: Create Pull Request with GitHub CLI + if: steps.check_changes.outputs.changes_detected == 'true' + run: | + gh pr create \ + --base main \ + --head ${{ steps.setup_cli.outputs.branch_name }} \ + --title "Update OpenAPI Specification" \ + --body "This PR updates the OpenAPI specification from the official Vapi API endpoint. + + - Auto-generated by the Update OpenAPI Specification workflow + - Source: https://api.vapi.ai/api-json + - Generated at: $(date -u +'%Y-%m-%dT%H:%M:%SZ')" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: PR Result + if: steps.check_changes.outputs.changes_detected == 'true' + run: | + echo "Pull request created successfully!" + + - name: No Changes Result + if: steps.check_changes.outputs.changes_detected == 'false' + run: | + echo "No changes detected in OpenAPI specification. No PR created." \ No newline at end of file