| name: Check DB migration conflict |
| on: |
| push: |
| paths: |
| - "superset/migrations/**" |
| |
| jobs: |
| check_db_migration_conflict: |
| name: Check DB migration conflict |
| runs-on: ubuntu-20.04 |
| steps: |
| - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" |
| uses: actions/checkout@v2 |
| - name: Check and notify |
| uses: actions/github-script@v3 |
| with: |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| script: | |
| // API reference: https://octokit.github.io/rest.js |
| const currentBranch = context.ref.replace('refs/heads/', ''); |
| |
| // Find all pull requests to current branch |
| const opts = github.pulls.list.endpoint.merge({ |
| owner: context.repo.owner, |
| repo: context.repo.repo, |
| base: context.ref, |
| state: 'open', |
| sort: 'updated', |
| per_page: 100, |
| }); |
| const pulls = await github.paginate(opts); |
| if (pulls.length > 0) { |
| console.log(`Found ${pulls.length} open PRs for base branch "${currentBranch}"`) |
| } |
| |
| for (const pull of pulls) { |
| const listFilesOpts = await github.pulls.listFiles.endpoint.merge({ |
| owner: context.repo.owner, |
| repo: context.repo.repo, |
| pull_number: pull.number, |
| }); |
| const files = await github.paginate(listFilesOpts); |
| if ( |
| files.some(x => x.contents_url.includes('/contents/superset/migrations')) |
| ) { |
| console.log(`PR #${pull.number} "${pull.title}" also added db migration`) |
| await github.issues.createComment({ |
| issue_number: context.issue.number, |
| owner: context.repo.owner, |
| repo: context.repo.repo, |
| issue_number: pull.number, |
| body: |
| `# 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️ 🙅♂️` + |
| `❗ @${pull.user.login} Your base branch \`${currentBranch}\` has ` + |
| 'also updated `superset/migrations`.\n' + |
| '\n' + |
| '**Please consider rebasing your branch and [resolving potential db migration conflicts](https://github.com/apache/superset/blob/master/CONTRIBUTING.md#merging-db-migrations).**', |
| }); |
| } |
| } |