# Copyright 2021 Google LLC # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # https://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: A workflow for updating discovery artifacts # Controls when the action will run. on: schedule: # * is a special character in YAML so you have to quote this string # Run this Github Action every Tuesday at 7 AM UTC - cron: '0 7 * * 2' jobs: build: name: Update Discovery Artifacts PR runs-on: ubuntu-latest if: ${{github.repository == 'googleapis/google-api-python-client'}} steps: - name: Get current date id: date run: echo "::set-output name=current_date::$(date +'%Y-%m-%d')" - name: Check out main branch uses: actions/checkout@v2 with: ref: refs/heads/main - name: Create branch run: | git checkout -b update-discovery-artifacts-${{ steps.date.outputs.current_date }} - name: Set up Python 3.9 uses: actions/setup-python@v2 with: python-version: 3.9 - name: Install google-api-python-client run: pip3 install -e . - name: Install script dependencies run: pip3 install -r requirements.txt working-directory: ./scripts # Apply a workaround to discovery.py to avoid DefaultCredentialsError # which is raised when calling `build_from_document()` as a result of # `google.auth.default()`. The workaround is to bypass the code block that # attempts to load default credentials. - name: Workaround to avoid DefaultCredentialsError in discovery.py run: sed -i -e 's/if credentials is None/if False/g' googleapiclient/discovery.py - name: Run Change Summary run: python3 updatediscoveryartifacts.py working-directory: ./scripts - name: Commit changes run: ./createcommits.sh working-directory: ./scripts - name: Push changes run: git push -f --set-upstream origin update-discovery-artifacts-${{ steps.date.outputs.current_date }} - name: Prepare summary for PR Body id: pr_body shell: bash run: | python3 buildprbody.py output=$(cat temp/allapis.summary) output="${output//'%'/'%25'}" output="${output//$'\n'/'%0A'}" output="${output//$'\r'/'%0D'}" echo "::set-output name=change_summary::$output" working-directory: ./scripts - name: Create PR uses: actions/github-script@v4.0.2 with: github-token: ${{secrets.YOSHI_CODE_BOT_TOKEN}} script: | async function createPR () { const { owner, repo } = context.repo const branch = 'update-discovery-artifacts-${{ steps.date.outputs.current_date }}' let prBody = `${{ steps.pr_body.outputs.change_summary }}` const prTitle = 'chore: Update discovery artifacts' const pullRequests = await github.pulls.list({ owner: owner, repo: repo, head: `${owner}:${branch}`, state: 'open' }) if (pullRequests.data.length === 1) { prNumber = pullRequests.data[0].number await github.pulls.update({ owner: owner, repo: repo, pull_number: prNumber, title: prTitle, body: prBody }) console.log('Updated PR') } else { const createPrResult = await github.pulls.create({ owner: owner, repo: repo, base: 'main', head: `${owner}:${branch}`, title: prTitle, body: prBody }) prNumber = createPrResult.data.number console.log('Created PR') } } createPR()