Update OpenAPI Types #74
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 OpenAPI Types | |
| on: | |
| schedule: | |
| # Run daily at midnight UTC | |
| - cron: '0 0 * * *' | |
| workflow_dispatch: | |
| inputs: | |
| force_release: | |
| description: 'Force a new release even if no changes' | |
| required: false | |
| default: false | |
| type: boolean | |
| env: | |
| WAHA_URL: http://localhost:3000 | |
| WHATSAPP_SWAGGER_USERNAME: WHATSAPP_SWAGGER_USERNAME | |
| WHATSAPP_SWAGGER_PASSWORD: WHATSAPP_SWAGGER_PASSWORD | |
| WAHA_DASHBOARD_USERNAME: WAHA_DASHBOARD_USERNAME | |
| WAHA_DASHBOARD_PASSWORD: WAHA_DASHBOARD_PASSWORD | |
| WAHA_API_KEY: WAHA_API_KEY | |
| jobs: | |
| update-types: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GH_PAT }} | |
| - name: Setup environment | |
| uses: ./.github/actions/setup | |
| with: | |
| node-version: '20' | |
| - name: Get current OpenAPI SHA | |
| id: old_sha | |
| run: | | |
| if [ -f openapi.json ]; then | |
| SHA=$(sha256sum openapi.json | cut -d' ' -f1) | |
| echo "sha=$SHA" >> $GITHUB_OUTPUT | |
| echo "Current OpenAPI SHA: $SHA" | |
| else | |
| echo "sha=none" >> $GITHUB_OUTPUT | |
| echo "No existing openapi.json" | |
| fi | |
| - name: Start WAHA container | |
| run: | | |
| docker run -d \ | |
| --name waha \ | |
| -p 3000:3000 \ | |
| -e WHATSAPP_SWAGGER_USERNAME=${{ env.WHATSAPP_SWAGGER_USERNAME }} \ | |
| -e WHATSAPP_SWAGGER_PASSWORD=${{ env.WHATSAPP_SWAGGER_PASSWORD }} \ | |
| -e WAHA_DASHBOARD_USERNAME=${{ env.WAHA_DASHBOARD_USERNAME }} \ | |
| -e WAHA_DASHBOARD_PASSWORD=${{ env.WAHA_DASHBOARD_PASSWORD }} \ | |
| -e WAHA_API_KEY=${{ env.WAHA_API_KEY }} \ | |
| devlikeapro/waha:latest | |
| - name: Wait for WAHA to be ready | |
| run: | | |
| echo "Waiting for WAHA to start..." | |
| for i in {1..60}; do | |
| if curl -s -u ${{ env.WHATSAPP_SWAGGER_USERNAME }}:${{ env.WHATSAPP_SWAGGER_PASSWORD }} ${{ env.WAHA_URL }}/-json > /dev/null 2>&1; then | |
| echo "WAHA is ready!" | |
| break | |
| fi | |
| # Also check logs for ready message | |
| if docker logs waha 2>&1 | grep -q "WhatsApp HTTP API is running"; then | |
| sleep 2 | |
| echo "WAHA started, checking API..." | |
| fi | |
| echo "Waiting... ($i/60)" | |
| sleep 2 | |
| done | |
| - name: Fetch OpenAPI spec | |
| run: | | |
| # Try with provided credentials first, fallback to extracting from logs | |
| if ! curl -f -s -u ${{ env.WHATSAPP_SWAGGER_USERNAME }}:${{ env.WHATSAPP_SWAGGER_PASSWORD }} -o openapi.json ${{ env.WAHA_URL }}/-json; then | |
| echo "Fixed credentials failed, extracting from logs..." | |
| SWAGGER_PASSWORD=$(docker logs waha 2>&1 | grep "WHATSAPP_SWAGGER_PASSWORD=" | tail -1 | cut -d'=' -f2) | |
| curl -u admin:$SWAGGER_PASSWORD -o openapi.json ${{ env.WAHA_URL }}/-json | |
| fi | |
| echo "OpenAPI spec size: $(wc -c < openapi.json) bytes" | |
| - name: Stop WAHA container | |
| if: always() | |
| run: docker stop waha || true | |
| - name: Format OpenAPI spec | |
| run: npx prettier --write openapi.json | |
| - name: Get new OpenAPI SHA | |
| id: new_sha | |
| run: | | |
| SHA=$(sha256sum openapi.json | cut -d' ' -f1) | |
| echo "sha=$SHA" >> $GITHUB_OUTPUT | |
| echo "New OpenAPI SHA: $SHA" | |
| - name: Check for changes | |
| id: changes | |
| run: | | |
| if [ "${{ steps.old_sha.outputs.sha }}" = "${{ steps.new_sha.outputs.sha }}" ]; then | |
| echo "has_changes=false" >> $GITHUB_OUTPUT | |
| echo "No changes detected (SHA match)" | |
| else | |
| echo "has_changes=true" >> $GITHUB_OUTPUT | |
| echo "Changes detected!" | |
| echo "Old SHA: ${{ steps.old_sha.outputs.sha }}" | |
| echo "New SHA: ${{ steps.new_sha.outputs.sha }}" | |
| fi | |
| - name: Generate types | |
| if: steps.changes.outputs.has_changes == 'true' || inputs.force_release == true | |
| run: pnpm run generate:types | |
| - name: Format code | |
| if: steps.changes.outputs.has_changes == 'true' || inputs.force_release == true | |
| run: pnpm run format | |
| - name: Get WAHA version | |
| if: steps.changes.outputs.has_changes == 'true' || inputs.force_release == true | |
| id: waha_version | |
| run: | | |
| VERSION=$(jq -r '.info.version // "unknown"' openapi.json) | |
| echo "waha_version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "WAHA version: $VERSION" | |
| - name: Update package version | |
| if: steps.changes.outputs.has_changes == 'true' || inputs.force_release == true | |
| id: bump_version | |
| run: | | |
| VERSION="${{ steps.waha_version.outputs.waha_version }}" | |
| echo "New version: $VERSION" | |
| # Update package.json with new version | |
| jq ".version = \"$VERSION\"" package.json > package.json.tmp | |
| mv package.json.tmp package.json | |
| echo "new_version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Commit and tag | |
| if: steps.changes.outputs.has_changes == 'true' || inputs.force_release == true | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git add openapi.json src/generated/ package.json | |
| git commit -m "chore: update types for WAHA ${{ steps.waha_version.outputs.waha_version }}" | |
| git tag -a "v${{ steps.bump_version.outputs.new_version }}" -m "Release v${{ steps.bump_version.outputs.new_version }} for WAHA ${{ steps.waha_version.outputs.waha_version }}" | |
| git push --follow-tags | |
| - name: Create GitHub Release | |
| if: steps.changes.outputs.has_changes == 'true' || inputs.force_release == true | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: v${{ steps.bump_version.outputs.new_version }} | |
| name: v${{ steps.bump_version.outputs.new_version }} | |
| body: | | |
| ## WAHA Version | |
| This release was generated from WAHA version **${{ steps.waha_version.outputs.waha_version }}** | |
| ## Installation | |
| ```bash | |
| npm install @muhammedaksam/waha-node@${{ steps.bump_version.outputs.new_version }} | |
| # or | |
| pnpm add @muhammedaksam/waha-node@${{ steps.bump_version.outputs.new_version }} | |
| # or | |
| yarn add @muhammedaksam/waha-node@${{ steps.bump_version.outputs.new_version }} | |
| ``` | |
| generate_release_notes: true |