_Context:_
Normally, all open issues/PRs in the repository that's running this
action are retrieved then all the label, assignee, milestone, etc. criteria
you provide to the action are applied. Unfortunately, this limits the action
to only those issues and PRs in this repository. It also prevents operating
on only a subset of issues or PRs that can't be filtered by the existing
action criteria. A good example of this are PRs that are in a
`review:changes_requested` state. While additional filtering criteria could
be added to the action, it would result in additional callbacks to GitHub
which could trigger rate-limits to be applied.
_Purpose:_
This option is an array of one or more standard [GitHub Issues and
Pull Requests search queries]
(https://docs.github.com/en/search-github/searching-on-github/searching-issues-and-pull-requests)
which will be used to retrieve the set of issues/PRs to test and take action
on. These queries will be used in place of the default retrieval of all open
issues and PRs for the context's owner/repo. It can be used to expand or
limit the set of issues and PRs operated on beyond what is retuned by the
standard query. When the retrieval is complete, all the other label,
assignee, milestone, etc. criteria will be applied.
You may also use this option to improve performance when you have a large number
of open issues or PRs but only a small subset might be eligible for action. For
instance, let's say you have 1000 open issues in your repository but only those
with label `auto-closable` should ever be automatically marked as stale or
closed. By default, this action would retrieve all 1000 issues _and all open
PRs_ and iterate over them looking for the label you specified in the
`only-issues-label` parameter. If you use the `only-matching-filter` parameter
with `repo:myorg/myrepo is:issue label:auto-closable` this would limit the
download to just those issues you _know_ should have further criteria
applied.
_Syntax:_
```
only-matching-filter: [ "<query_string>", ... ]
```
Or if there's only one query string...
```
only-matching-filter: '<query_string>'
```
_Examples:_
To operate only on the open PRs in your organization that have a review state of
`changes_requested`:
```
only-matching-filter: 'org:myorg is:pr is:open review:changes_requested'
```
Since there's only one query specified, you can omit the array syntax and just
specify the string directly.
GitHub only allows boolean logic and grouping in a Code Searches not in Issues
and Pull Requests searches so there's no way to do an "OR" operation but you
can get around this to a limited degree by specifying multiple search queries
in the form of a string array. Each query is run separately and the results are
accumulated and duplicates removed before any further processing is done.
To retrieve all of the open PRs in your organization that have a review state of
`changes_requested` or a label named `submitter-action-required`, you'd use:
```
only-matching-filter: '[ "org:myorg is:pr is:open review:changes_requested", "org:myorg is:pr is:open label:submitter-action-required" ]'
```
_Notes:_
* Each query is checked to ensure it contains an `owner:`, `org:`, `user:` or
`repo:` search term. If it doesn't, the search will automatically be scoped
to the owner and repository in the context to prevent accidental global
searches. If the request doesn't already contain an `is:open` search term,
it will automatically be added as well.
* If using the array form, the value of this parameter MUST be valid JSON
which means using double quotes around each query string, not single quotes.
Default value: '[]'
Resolves: #1143
* Add new 'include-only-assigned' option
If set, only issues containing assignees will be processed
* Test new flag
* Update code comment
* Update src/classes/issues-processor.ts
Co-authored-by: Francesco Renzi <rentziass@github.com>
* Update index.js with typo fix
Co-authored-by: Francesco Renzi <rentziass@github.com>
* chore(assignees): add logs
* docs(stale-issue-comment): update the docs to remove that omitting will not send a message
To be sure, what would be even better is to add a test using the default config (because the main issue is that the default options of the specs are not matching the ones from the action).
Closes#521
* test(comment): add more coverage to test the stale issue message
* docs(readme): improve the wording
Co-authored-by: Luke Tomlinson <luketomlinson@github.com>
* refactor: simplify the code to use the stats for the specs
* chore(rebase): fix rebase issue
* chore(statistics): fix issue due to rebase
Co-authored-by: Luke Tomlinson <luketomlinson@github.com>
* chore(assignees): add logs
* feat(draft-pr): add new option to not process PRs which are in draft
* refactor(draft-pr): create a dedicated class to handle the logic
* chore(index): update index file
* chore(assignees): add logs
* docs(readme): use the override syntax to simplify the reading
* docs(readme): add missing default options
* docs(readme): add 3 new options to ignore activity before stale
* chore(action): add 3 new options
* fix(removeStaleWhenUpdated): use the value of the action config as expected
Fixes#451
* chore(main): add 3 new options
* feat(ignore): add new class to ignore all activities before stale
* feat(option): add new options to ignore all activities before stale
* chore(index): update index file
* docs(readme): fix typo
* docs(readme): add missing empty row
* chore(rebase): fix logger issues due to rebase
* chore: aplly changes due to rebase
* refactor(naming): change the name of the options as suggested
* chore(logs): reverse the logs as well
* docs(readme): format the table of options
* refactor(naming): rename the the options
* style(rename): rename more updates wording to activities
* build(ci): run the test step as expected for a CI
instead of using a real linter with auto fix and the tests verbose as fuck
* chore: handle breaking changes due to new changes
* refactor(naming): rename and reverse the options
* style(tests): use plural for some describe
* docs(days-before-stale): list the new option
* chore(index): update index file
* chore: keep static methods on top
* chore(logs): remove useless log
* feat(options): add new options to avoid stale based on comments
Helping to close#441, #470, #435?
Closes#390 due to no activity
BREAKING CHANGES: the options related to remove-stale-when-updated will only check the updates, not the comment. It is only impactint the configurations using the value at false
* style(readme): fix table syntax due to rebase
* docs(readme): add permissions only for the new options
* Add support for adding & removing labels when no longer stale
* Add remove/addLabelsWhenUpdatedFromStale to relevant spec files. Modify arguments to remove ambiguity in 'labels' var & parameter
* Change parameters for clarity, let autoformat do its thing
* PR feedback: More useful logging when removing labels
* Wrap client calls in try catches
* Use Unstale in variable names
* Don't run add label logic under debug
* Add test for labels added to unstale issues
* PR Feedback: logging
* Update README
* Rename vars to labels-to-add/remove-when-unstale
* Apply doc suggestions from code review
Co-authored-by: Geoffrey Testelin <geoffrey.testelin@gmail.com>
* PR Feedback
Co-authored-by: Geoffrey Testelin <geoffrey.testelin@gmail.com>
* fix(operations): fail fast the current batch to respect the operations limit
Instead of processing an entire batch of 100 issues before checking the operations left, simply do it before processing an issue so that we respect as expected the limitation of the operations per run
Fixes#466
* test(debug): disable the dry-run for the test by default
we will be able to test the operations per run and have more complete logs that could help us debug the workflow
* chore(logs): also display the stats when the operations per run stopped the workflow
* chore(stats): fix a bad stats related to the consumed operations
* test(operations-per-run): add coverage
* chore: update index
* feat(options): simplify config by removing skip stale message options
Closes#405Closes#455
BREAKING CHANGES: remove skip-stale-issue-message and skip-stale-pr-message options. If you used this option, replace it by an empty message for the options stale-issue-message and stale-pr-message
* build(dist): update dist
also lint some files
* docs(readme): update the docs by removing the skip options
* docs(only-labels): enhance the docs and fix duplicate (#341)
* docs(only-labels): remove duplicated option and improve descriptions
a bad rebase happend
* docs(readme): use a multi-line array and remove the optional column
the option column was not helpful since each value is optional
the multi-line array will allow to have a better UI in small devices and basically in GitHub too due to the max-width
* style(readme): break line for the statistics
* docs(readme): add a better description for the ascending option
* docs(action): add missing punctuation
* build(deps-dev): bump @typescript-eslint/eslint-plugin (#342)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.15.2 to 4.16.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.16.1/packages/eslint-plugin)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump @octokit/rest from 18.3.0 to 18.3.2 (#350)
Bumps [@octokit/rest](https://github.com/octokit/rest.js) from 18.3.0 to 18.3.2.
- [Release notes](https://github.com/octokit/rest.js/releases)
- [Commits](https://github.com/octokit/rest.js/compare/v18.3.0...v18.3.2)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#15)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#17)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#18)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat(remove-stale-when-updated): add 2 options for issues and prs
closes#377
also I closed the stale process once the stale label is removed since the following process is regarding the closing and it should simply not occur if no longer stale
* chore(logs): add more logs to understand the process
* chore(logs): highlights more logs and humanize a bit more
* chore(index): update it
* refactor(checks): simplify if complexity
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* docs(only-labels): enhance the docs and fix duplicate (#341)
* docs(only-labels): remove duplicated option and improve descriptions
a bad rebase happend
* docs(readme): use a multi-line array and remove the optional column
the option column was not helpful since each value is optional
the multi-line array will allow to have a better UI in small devices and basically in GitHub too due to the max-width
* style(readme): break line for the statistics
* docs(readme): add a better description for the ascending option
* docs(action): add missing punctuation
* build(deps-dev): bump @typescript-eslint/eslint-plugin (#342)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.15.2 to 4.16.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.16.1/packages/eslint-plugin)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump @octokit/rest from 18.3.0 to 18.3.2 (#350)
Bumps [@octokit/rest](https://github.com/octokit/rest.js) from 18.3.0 to 18.3.2.
- [Release notes](https://github.com/octokit/rest.js/releases)
- [Commits](https://github.com/octokit/rest.js/compare/v18.3.0...v18.3.2)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#15)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#17)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#18)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat(any-of-labels): add 2 new options to customize for issues/PRs
closes#371
change this option and only-labels to have tree-logs
* chore(index): update it
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* docs(only-labels): enhance the docs and fix duplicate (#341)
* docs(only-labels): remove duplicated option and improve descriptions
a bad rebase happend
* docs(readme): use a multi-line array and remove the optional column
the option column was not helpful since each value is optional
the multi-line array will allow to have a better UI in small devices and basically in GitHub too due to the max-width
* style(readme): break line for the statistics
* docs(readme): add a better description for the ascending option
* docs(action): add missing punctuation
* build(deps-dev): bump @typescript-eslint/eslint-plugin (#342)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.15.2 to 4.16.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.16.1/packages/eslint-plugin)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump @octokit/rest from 18.3.0 to 18.3.2 (#350)
Bumps [@octokit/rest](https://github.com/octokit/rest.js) from 18.3.0 to 18.3.2.
- [Release notes](https://github.com/octokit/rest.js/releases)
- [Commits](https://github.com/octokit/rest.js/compare/v18.3.0...v18.3.2)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#15)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#17)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test(refactor): use toHaveLength
* feat(statistics): split the processed issues and prs
* feat(statistics): split the new stale issues and prs
* feat(statistics): split the no longer stale issues and prs
* chore(deps): undo upgrade of dependencies
* feat(statistics): split closed issues and prs
* feat(statistics): use the word "items" when something concern both issues and prs
* feat(statistics): split more stats by issues and prs
* feat(statistics): split more stats by issues and prs (final)
* chore(index): update it
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* docs(only-labels): enhance the docs and fix duplicate (#341)
* docs(only-labels): remove duplicated option and improve descriptions
a bad rebase happend
* docs(readme): use a multi-line array and remove the optional column
the option column was not helpful since each value is optional
the multi-line array will allow to have a better UI in small devices and basically in GitHub too due to the max-width
* style(readme): break line for the statistics
* docs(readme): add a better description for the ascending option
* docs(action): add missing punctuation
* build(deps-dev): bump @typescript-eslint/eslint-plugin (#342)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.15.2 to 4.16.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.16.1/packages/eslint-plugin)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump @octokit/rest from 18.3.0 to 18.3.2 (#350)
Bumps [@octokit/rest](https://github.com/octokit/rest.js) from 18.3.0 to 18.3.2.
- [Release notes](https://github.com/octokit/rest.js/releases)
- [Commits](https://github.com/octokit/rest.js/compare/v18.3.0...v18.3.2)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage for the stale label behaviour (#352) (#15)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(logs): add logs for the milestones
* chore(errors): use actions error instead of throw errors
* chore(logs): enhance the logs and add some colors
tl;dr: blue for values, megenta for options, white for messages, yellow light for warnings, yellow for milestones and green for success
still a WIP but I wish to confirm this before continuing
@hross is it ok for you?
* chore(index): update the index
* chore(ci): use npm ci instead of npm i
* chore(logs): removed some useless logs
* refactor(issues): remove useless check
* chore(statistics): show the real count of fetched issues
* refactor(operations): use a class to handle the operations left
closes#361
* chore(logs): include the total number of issues in the log for a batch
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add more coverage
* docs: reorder and enhance typo
* docs(contributing): add more information about the npm scripts
* feat(statistics): add simple statistics
* feat(statistics): add more stats
* refactor(issues-processor): remove some options from the constructor
it should have been only useful for the tests
* feat(statistics): add stats for new stale or undo stale issues
* chore(rebase): handle rebase conflicts
* feat(assignees): add new option to avoid stale for assignees
closes#271
* test: add more coverage
* docs: fix readme format issue
* docs: reorder and enhance typo
* docs(contributing): add more information about the npm scripts
* feat(only-labels): add new options to customize it for issues and PR
closes#308
* feat(assignees): add new option to avoid stale for assignees
closes#271
* test: add more coverage
* docs: fix readme format issue
* docs: reorder and enhance typo
* docs(contributing): add more information about the npm scripts
* docs(readme): update the default values to reflect the real applied ones
* feat(close-label): automatically remove it when no longer closed nor locked
closes#278
* feat(assignees): add new option to avoid stale for assignees
closes#271
* test: add more coverage
* docs: fix readme format issue
* docs: reorder and enhance typo
* docs(contributing): add more information about the npm scripts
* refactor: move and rename the interfaces/classes
closes#272
* docs: update the readme and action to describe the new options for milestones
* refactor: split the tests into multiple files
* feat(milestones): add new options to exempt all milestones
* test: add coverage for the default values
* test(milestones): add more coverage (wip)
* test(milestones): add more coverage for the multiple exempt milestones
* test: reduce duplicated code
* test: change some describes
* test: add more coverage
* test: add more coverage
* test: add final coverage
* build(tsc): add missing project flag to build with the right tsconfig
* test(milestones): use each to reduce the complexity of the tests
* chore: fix an eslint issue with prettier on windows
the end of line was wrong each time the os process the files
* docs: move the contribution section to a dedicated file
add more content to help the debug
* chore: make sure the rebase is ok
* Fixed should be stale condition
When different stale period is used for issues and pull requests, this code uses wrong one.
This was probably missed in https://github.com/actions/stale/pull/224Fixes#299
* Add tests for #299
Co-authored-by: Geoffrey Testelin <geoffrey.testelin@gmail.com>