openapi-updated #86
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: Regenerate | |
| on: | |
| repository_dispatch: | |
| types: [openapi-updated] | |
| workflow_dispatch: | |
| jobs: | |
| generate: | |
| name: Regenerate from OpenAPI | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| fetch-depth: 0 | |
| - name: Setup Ruby | |
| uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: '3.2' | |
| bundler-cache: false | |
| - name: Setup Java (for openapi-generator) | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Install OpenAPI Generator | |
| run: | | |
| npm install -g @openapitools/openapi-generator-cli | |
| - name: Fetch latest OpenAPI spec | |
| run: | | |
| curl -f -o openapi.yaml https://zernio.com/openapi.yaml | |
| echo "Fetched OpenAPI spec" | |
| - name: Clean generated files | |
| run: | | |
| rm -rf lib/late-sdk/models lib/late-sdk/api docs spec | |
| rm -rf lib/late lib/late.rb late.gemspec | |
| - name: Generate SDK | |
| run: | | |
| openapi-generator-cli generate \ | |
| -i openapi.yaml \ | |
| -g ruby \ | |
| -o . \ | |
| --skip-validate-spec \ | |
| --additional-properties=gemName=late-sdk,moduleName=Late,gemVersion=0.1.0 \ | |
| --inline-schema-name-mappings "getGoogleBusinessLocationDetails_200_response_specialHours_specialHourPeriods_inner_startDate=GbpSpecialHourPeriodStartDate,getGoogleBusinessLocationDetails_200_response_specialHours_specialHourPeriods_inner=GbpSpecialHourPeriod,getGoogleBusinessLocationDetails_200_response_serviceItems_inner_freeFormServiceItem_label=GbpFreeFormServiceItemLabel,updateGoogleBusinessLocationDetails_request_serviceItems_inner_freeFormServiceItem_label=GbpUpdateFreeFormServiceItemLabel" \ | |
| --git-user-id=zernio-dev \ | |
| --git-repo-id=zernio-ruby | |
| - name: Patch README install instructions | |
| run: | | |
| python3 -c " | |
| import re, textwrap | |
| with open('README.md', 'r') as f: | |
| content = f.read() | |
| install_section = textwrap.dedent('''## Installation | |
| Install via RubyGems: | |
| \`\`\`bash | |
| gem install late-sdk | |
| \`\`\` | |
| Or add it to your Gemfile: | |
| \`\`\`ruby | |
| gem \"late-sdk\" | |
| \`\`\`''') | |
| content = re.sub(r'## Installation.*?(?=\n## )', install_section + '\n\n', content, flags=re.DOTALL) | |
| with open('README.md', 'w') as f: | |
| f.write(content) | |
| " | |
| - name: Install dependencies | |
| run: bundle install | |
| - name: Run tests | |
| run: bundle exec rake spec | |
| - name: Check for changes | |
| id: changes | |
| run: | | |
| git add -A | |
| if git diff --staged --quiet; then | |
| echo "has_changes=false" >> $GITHUB_OUTPUT | |
| else | |
| echo "has_changes=true" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Get next version | |
| if: steps.changes.outputs.has_changes == 'true' | |
| id: version | |
| run: | | |
| LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0") | |
| NEW_VERSION=$(echo $LATEST_TAG | awk -F. '{printf "v%d.%d.%d", $1, $2, $3+1}' | sed 's/vv/v/') | |
| GEM_VERSION=$(echo $NEW_VERSION | sed 's/v//') | |
| echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT | |
| echo "gem_version=$GEM_VERSION" >> $GITHUB_OUTPUT | |
| - name: Update gem version | |
| if: steps.changes.outputs.has_changes == 'true' | |
| run: | | |
| sed -i "s/VERSION = '.*'/VERSION = '${{ steps.version.outputs.gem_version }}'/" lib/late-sdk/version.rb | |
| - name: Commit and push | |
| if: steps.changes.outputs.has_changes == 'true' | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git add -A | |
| git commit -m "chore: regenerate from OpenAPI spec | |
| - Auto-generated SDK updates | |
| - Version: ${{ steps.version.outputs.new_version }}" | |
| git push | |
| - name: Build gem | |
| if: steps.changes.outputs.has_changes == 'true' | |
| run: gem build late-sdk.gemspec | |
| - name: Publish to RubyGems | |
| if: steps.changes.outputs.has_changes == 'true' | |
| run: | | |
| mkdir -p ~/.gem | |
| echo -e "---\n:rubygems_api_key: ${{ secrets.RUBYGEMS_API_KEY }}" > ~/.gem/credentials | |
| chmod 0600 ~/.gem/credentials | |
| gem push late-sdk-${{ steps.version.outputs.gem_version }}.gem | |
| continue-on-error: true | |
| - name: Build and publish as zernio-sdk | |
| if: steps.changes.outputs.has_changes == 'true' | |
| run: | | |
| cp late-sdk.gemspec zernio-sdk.gemspec | |
| sed -i 's/s.name = "late-sdk"/s.name = "zernio-sdk"/' zernio-sdk.gemspec | |
| gem build zernio-sdk.gemspec | |
| gem push zernio-sdk-${{ steps.version.outputs.gem_version }}.gem | |
| env: | |
| GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }} | |
| continue-on-error: true | |
| - name: Create GitHub Release | |
| if: steps.changes.outputs.has_changes == 'true' | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ steps.version.outputs.new_version }} | |
| name: ${{ steps.version.outputs.new_version }} | |
| generate_release_notes: true | |
| body: | | |
| ## Auto-generated SDK Update | |
| ```bash | |
| gem install late-sdk | |
| # or | |
| gem install zernio-sdk | |
| ``` | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |