| name: PR AutoFix |
| on: [push] |
| permissions: {} |
| jobs: |
| PRAutoFix: |
| permissions: |
| actions: write # to cancel/stop running workflows (styfle/cancel-workflow-action) |
| contents: write # to create branch (peter-evans/create-pull-request) |
| pull-requests: write # to create a PR (peter-evans/create-pull-request) |
| |
| runs-on: ubuntu-latest |
| steps: |
| # Cache bazel build |
| - name: Get current time |
| uses: srfrnk/current-time@master |
| id: current-time |
| with: |
| format: YYYYWW |
| - name: Get current time |
| uses: srfrnk/current-time@master |
| id: current-time-with-day |
| with: |
| format: YYYYWWd |
| - name: Cache bazel |
| uses: actions/cache@v3 |
| env: |
| cache-name: bazel-cache |
| with: |
| path: ~/.cache/bazel |
| # formattedTime here is like 2021323 - the year concatenated with the week then |
| # the day of that week. |
| # As this changes every day, we cycle to a new cache once per day, with lookup |
| # across the week (and then the year). |
| key: ${{ runner.os }}-${{ steps.current-time-with-day.outputs.formattedTime }} |
| restore-keys: | |
| ${{ runner.os }}-${{ steps.current-time.outputs.formattedTime }} |
| ${{ runner.os }}- |
| # Cancel current runs if they're still running |
| # (saves processing on fast pushes) |
| - name: Cancel Previous Runs |
| uses: styfle/cancel-workflow-action@0.9.1 |
| with: |
| access_token: ${{ github.token }} |
| # Allow opt-out for some users |
| - name: Should I Stay Or Should I Go |
| uses: actions/github-script@v4 |
| id: check |
| with: |
| script: | |
| // If you'd like not to run this code on your commits, add your github user id here: |
| NO_AUTOFIX_USERS = [] |
| const { owner, repo } = context.repo |
| if (NO_AUTOFIX_USERS.includes(context.actor)) { |
| console.log('Cancelling'); |
| const run_id = "${{ github.run_id }}"; |
| await github.actions.cancelWorkflowRun({ owner, repo, run_id }); |
| return 'go'; |
| } else { |
| return 'stay'; |
| } |
| - name: Wait for cancellation |
| run: sleep 60 |
| if: steps.check.outputs.result == 'go' |
| - name: Should build? |
| run: test "${{ steps.check.outputs.result }}" = "stay" |
| # Setup to run sanity suite |
| - name: Install Python Interpreter |
| uses: actions/setup-python@v4 |
| with: |
| python-version: 3.8 |
| - name: Install Python Packages |
| run: | |
| pip install pyyaml mako virtualenv |
| sudo apt-get update |
| sudo apt-get install python3-dev |
| - name: Check out repository code |
| uses: actions/checkout@v3 |
| with: |
| submodules: True |
| - name: Get the upstream code |
| run: | |
| cd ${{ github.workspace }} |
| git remote add upstream https://github.com/grpc/grpc |
| git fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 upstream master |
| # Run the things! |
| - name: clang-tidy fixes |
| run: ANDROID_NDK_HOME= ${{ github.workspace }}/tools/distrib/clang_tidy_code.sh --fix --only-changed || true |
| - name: Run sanitize |
| run: ANDROID_NDK_HOME= ${{ github.workspace }}/tools/distrib/sanitize.sh |
| # Report back with a PR if things are broken |
| - name: Create Pull Request |
| uses: peter-evans/create-pull-request@v3 |
| with: |
| delete-branch: true |
| branch-suffix: short-commit-hash |
| commit-message: "Automated change: Fix sanity tests" |
| title: Automated fix for ${{ github.ref }} |
| body: | |
| PanCakes to the rescue! |
| |
| We noticed that our 'sanity' test was going to fail, but we think we can fix that automatically, so we put together this PR to do just that! |
| |
| If you'd like to opt-out of these PR's, add yourself to NO_AUTOFIX_USERS in .github/workflows/pr-auto-fix.yaml |