diff --git a/.github/workflows/spelling.yaml b/.github/workflows/spelling.yaml new file mode 100644 index 000000000..76e0532c1 --- /dev/null +++ b/.github/workflows/spelling.yaml @@ -0,0 +1,206 @@ +name: Check Spelling + +# Comment management is handled through a secondary job, for details see: +# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions +# +# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment +# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare) +# it needs `contents: write` in order to add a comment. +# +# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment +# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment) +# it needs `pull-requests: write` in order to manipulate those comments. + +# Updating pull request branches is managed via comment handling. +# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list +# +# These elements work together to make it happen: +# +# `on.issue_comment` +# This event listens to comments by users asking to update the metadata. +# +# `jobs.update` +# This job runs in response to an issue_comment and will push a new commit +# to update the spelling metadata. +# +# `with.experimental_apply_changes_via_bot` +# Tells the action to support and generate messages that enable it +# to make a commit to update the spelling metadata. +# +# `with.ssh_key` +# In order to trigger workflows when the commit is made, you can provide a +# secret (typically, a write-enabled github deploy key). +# +# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key + +# Sarif reporting +# +# Access to Sarif reports is generally restricted (by GitHub) to members of the repository. +# +# Requires enabling `security-events: write` +# and configuring the action with `use_sarif: 1` +# +# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output + +# Minimal workflow structure: +# +# on: +# push: +# ... +# pull_request_target: +# ... +# jobs: +# # you only want the spelling job, all others should be omitted +# spelling: +# # remove `security-events: write` and `use_sarif: 1` +# # remove `experimental_apply_changes_via_bot: 1` +# ... otherwise adjust the `with:` as you wish + +on: + push: + branches: + - "**" + tags-ignore: + - "**" + pull_request_target: + branches: + - "**" + types: + - 'opened' + - 'reopened' + - 'synchronize' + issue_comment: + types: + - 'created' + +jobs: + spelling: + name: Check Spelling + permissions: + contents: read + pull-requests: read + actions: read + security-events: write + outputs: + followup: ${{ steps.spelling.outputs.followup }} + internal_state_directory: ${{ steps.spelling.outputs.internal_state_directory }} + docker_container: ${{ steps.spelling.outputs.docker_container }} + env: + workflow_check_commit_messages: commits + runs-on: ubuntu-latest + if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }} + concurrency: + group: spelling-${{ github.event.pull_request.number || github.ref }} + # note: If you use only_check_changed_files, you do not want cancel-in-progress + cancel-in-progress: true + steps: + - name: checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ !contains(env.workflow_check_commit_messages, 'commits') && '1' || '0' }} + - name: test-clean + shell: bash + run: + cp -R . ../introspected/; + mv ../introspected . + - name: test-merge + if: ${{ contains(github.event_name, 'pull_request') }} + uses: check-spelling/checkout-merge@v0.0.4 + with: + path: introspected + - name: check-spelling + if: env.MERGE_FAILED != '1' + id: spelling + uses: ./ + with: + suppress_push_for_open_pull_request: 1 + check_file_names: 1 + experimental_path: introspected + spell_check_this: check-spelling/spell-check-this@prerelease + checkout: false + post_comment: 0 + use_magic_file: 1 + report-timing: 1 + experimental_apply_changes_via_bot: 1 + use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }} + extra_dictionary_limit: 10 + # this repository doesn't use php, but the dictionary has fairly good coverage + extra_dictionaries: + cspell:software-terms/dict/softwareTerms.txt + cspell:php/dict/php.txt + cspell:node/node.txt + cspell:python/src/python/python-lib.txt + check_commit_messages: ${{ env.workflow_check_commit_messages }} + ignore-pattern: '[^\p{Ll}\p{Lm}\p{Lt}\p{Lu}]' + upper-pattern: '[\p{Lu}\p{Lt}\p{Lm}]' + lower-pattern: '[\p{Ll}\p{Lm}]' + not-lower-pattern: '[^\p{Ll}\p{Lm}]' + not-upper-or-lower-pattern: '[^\p{Lu}\p{Lt}\p{Lm}]' + punctuation-pattern: "'" + + comment-push: + name: Report (Push) + # If your workflow isn't running on push, you can remove this job + runs-on: ubuntu-latest + needs: spelling + permissions: + contents: write + if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push' + steps: + - name: checkout + uses: actions/checkout@v4 + - name: comment + uses: ./ + with: + checkout: false + spell_check_this: check-spelling/spell-check-this@prerelease + task: ${{ needs.spelling.outputs.followup }} + internal_state_directory: ${{ needs.spelling.outputs.docker_container && needs.spelling.outputs.internal_state_directory }} + caller_container: ${{ needs.spelling.outputs.docker_container }} + + comment-pr: + name: Report (PR) + # If you workflow isn't running on pull_request*, you can remove this job + runs-on: ubuntu-latest + needs: spelling + permissions: + contents: read + pull-requests: write + if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') + steps: + - name: checkout + uses: actions/checkout@v4 + - name: comment + uses: ./ + with: + checkout: false + spell_check_this: check-spelling/spell-check-this@prerelease + task: ${{ needs.spelling.outputs.followup }} + internal_state_directory: ${{ needs.spelling.outputs.docker_container && needs.spelling.outputs.internal_state_directory }} + caller_container: ${{ needs.spelling.outputs.docker_container }} + experimental_apply_changes_via_bot: 1 + + update: + name: Update PR + permissions: + contents: write + pull-requests: write + actions: read + runs-on: ubuntu-latest + if: ${{ + github.event_name == 'issue_comment' && + github.event.issue.pull_request && + contains(github.event.comment.body, '@check-spelling-bot apply') + }} + concurrency: + group: spelling-update-${{ github.event.issue.number }} + cancel-in-progress: false + steps: + - name: checkout + uses: actions/checkout@v4 + - name: apply spelling updates + uses: ./ + with: + experimental_apply_changes_via_bot: 1 + checkout: false + ssh_key: "${{ secrets.CHECK_SPELLING }}" \ No newline at end of file diff --git a/spell-test.txt b/spell-test.txt new file mode 100644 index 000000000..539cbc5ac --- /dev/null +++ b/spell-test.txt @@ -0,0 +1 @@ +Thsi flie will chekc for spellign erors.