bot: "webpack-bot"
rules:
  # Add ci-ok, ci-not-ok labels depending on travis status
  # comment to point the user to the results
  # comment in case of success
  - filters:
      open: true
      pull_request:
        mergeable: true
      status_1:
        context: "continuous-integration/travis-ci/pr"
      ensure_1:
        value: "{{status_1.state}}"
        equals: "success"
    actions:
      label:
        add: "PR: CI-ok"
        remove: "PR: CI-not-ok"
      comment:
        identifier: "ci-result"
        message: |-
          Thank you for your pull request! The most important CI builds succeeded, we’ll review the pull request soon.
  - filters:
      open: true
      pull_request:
        mergeable: true
      status_1:
        context: "continuous-integration/travis-ci/pr"
      any:
        ensure_1:
          value: "{{status_1.state}}"
          equals: "failure"
    actions:
      label:
        add: "PR: CI-not-ok"
        remove: "PR: CI-ok"
      set:
        id: report_ci
        value: yep

  # Report specific error message if jest tests fails
  - filters:
      ensure:
        value: "{{report_ci}}"
        equals: yep
      commit: true
      status:
        context: "continuous-integration/travis-ci/pr"
      travis_job:
        state: "failed"
        allow_failure: false
        config:
          env: JOB_PART=integration
      fetch: travis_job.log
      string_cleanup:
        id: logResult
        value: "{{{fetch}}}"
        remove:
          - "^[\\s\\S]+?npm run travis:\\$JOB_PART\n*"
          - "npm ERR!.*\n"
          - "\n*=============================================================================\n[\\s\\S]*"
    actions:
      comment:
        identifier: "ci-result"
        message: |-
          @{{commit.author.login}} Please review the following output log for errors:

          ``` text
          {{{logResult}}}
          ```

          See [complete report here]({{status.target_url}}).
      set:
        id: report_ci
        value: nope

  # Report specific error message if linting fails
  - filters:
      ensure:
        value: "{{report_ci}}"
        equals: yep
      commit: true
      status:
        context: "continuous-integration/travis-ci/pr"
      travis_job:
        state: "failed"
        config:
          env: JOB_PART=lint
      fetch: travis_job.log
      string_cleanup:
        id: logResult
        value: "{{{fetch}}}"
        remove:
          - "^[\\s\\S]+?npm run travis:\\$JOB_PART\n*"
          - "npm ERR!.*\n"
          - "\n*The command \"npm run travis:\\$JOB_PART\" exited [\\s\\S]*"
    actions:
      comment:
        identifier: "ci-result"
        message: |-
          @{{commit.author.login}} The tests look fine, but there are code style issue in your Pull Request. Please review the following:

          ``` text
          {{{logResult}}}
          ```

          See [complete report here]({{status.target_url}}).
      set:
        id: report_ci
        value: nope

  # Report a general error message
  - filters:
      ensure:
        value: "{{report_ci}}"
        equals: yep
      commit: true
      status_1:
        context: "continuous-integration/travis-ci/pr"
    actions:
      comment:
        identifier: "ci-result"
        message: |-
          @{{commit.author.login}} The most important CI builds failed. This way your PR can't be merged.

          Please take a look at the CI results from [travis]({{status_1.target_url}}) ({{status_1.state}}) and fix these issues.

  # add conflict label to pull requests with conflict
  # on conflict all result labels are removed
  - filters:
      open: true
      pull_request:
        mergeable: false
    actions:
      label:
        add: "PR: conflict"
        remove:
          - "PR: tests-needed"
          - "PR: CI-ok"
          - "PR: CI-not-ok"
  - filters:
      open: true
      pull_request:
        mergeable: true
    actions:
      label:
        remove: "PR: conflict"

  # add unreviewed, reviewed, review-outdated labels
  # comment to ping reviewer
  # comment on new PR
  - filters:
      open: true
      in_order:
        commit: true
        review:
          state: APPROVED|CHANGES_REQUESTED
      ensure:
        value: "{{review.state}}"
        equals: APPROVED
    actions:
      label:
        add: "PR: reviewed-approved"
        remove:
          - "PR: review-outdated"
          - "PR: unreviewed"
          - "PR: reviewed"
  - filters:
      open: true
      in_order:
        commit: true
        review:
          state: APPROVED|CHANGES_REQUESTED
      ensure:
        value: "{{review.state}}"
        equals: CHANGES_REQUESTED
    actions:
      label:
        add: "PR: reviewed-changes-requested"
        remove:
          - "PR: review-outdated"
          - "PR: unreviewed"
          - "PR: reviewed"
  - filters:
      open: true
      in_order:
        review:
          state: APPROVED|CHANGES_REQUESTED
        commit: true
      not:
        label: "review-outdated"
      ensure:
        value: "{{commit.author.login}}"
        notEquals: "{{review.user.login}}"
    actions:
      label:
        add: "PR: review-outdated"
        remove:
          - "PR: reviewed-approved"
          - "PR: reviewed-changes-requested"
          - "PR: unreviewed"
          - "PR: reviewed"
      comment:
        identifier: "review-outdated"
        message: |-
          @{{commit.author.login}} Thanks for your update.

          I labeled the Pull Request so reviewers will review it again.

          @{{review.user.login}} Please review the new changes.
  - filters:
      open: true
      commit: true
      not:
        review:
          state: APPROVED|CHANGES_REQUESTED
    actions:
      label: "PR: unreviewed"

  # add non-master label to pull request to other branch
  - filters:
      open: true
      age:
        minimum: 1d
        maximum: 1w
      pull_request:
        head_ref: "^master$"
      permission: "read|none"
    actions:
      comment:
        identifier: "head-master"
        edit: true
        message: |-
          Hi @{{pull_request.user.login}}.

          Just a little hint from a friendly bot about the best practice when submitting pull requests:

          > Don't submit pull request from your own `master` branch. It's recommended to create a feature branch for the PR.

          *You don't have to change it for this PR, just make sure to follow this hint the next time you submit a PR.*

  # Move issue task
  - filters:
      open: true
      comment: "\\s*@webpack-bot\\s+move\\s+(?:to\\s+)?([a-z0-9_\\-\\.]+/[a-z0-9_\\-\\.]+)\\s*([\\s\\S]*)$"
      not:
        comment_1:
          matching: "moved\\-by\\-bot"
          author: "."
      permission:
        user: "{{comment.actor.login}}"
    actions:
      new_issue:
        target: "{{{comment_match.[1]}}}"
        body: |-
          {{{issue.body}}}

          ---

          This issue was moved from {{owner}}/{{repo}}#{{issue.number}} by @{{comment.actor.login}}. Original issue was by @{{issue.user.login}}.

          {{{comment_match.[2]}}}
      comment:
        identifier: moved-by-bot
        message: |-
          I've moved it to {{comment_match.[1]}}.
      close: true

  # mark inactive issues with inactive label
  # close them when no activity after warning
  - filters:
      issue: true
      open: true
      not:
        label: inactive
      ensure:
        value: "{{issue.reactions.[+1]}}"
        range: "< 10"
      last_action_age: 26w # half a year
    actions:
      comment:
        identifier: inactive-warning
        message: |-
          **This issue had no activity for at least half a year.**

          It's subject to automatic issue closing if there is no activity in the next 15 days.
      label: inactive
  - filters:
      open: true
      label: inactive
      last_action_age:
        maximum: 26w # half a year
    actions:
      label:
        remove:
          - inactive
  - filters:
      open: true
      label: inactive
      last_action_age:
        minimum: 15d
        includeBotActions: true
    actions:
      close: true
      comment:
        identifier: inactive-close
        message: |-
          Issue was closed because of inactivity.

          If you think this is still a valid issue, please file a new issue with additional information.

  # Check issues every week
  - filters:
      open: true
    actions:
      schedule: 1d
