# This is a basic workflow to help you get started with Actions

name: Spell check

# Controls when the workflow will run
on:
  workflow_call:
  schedule:
    # Trigger Codespell at a scheduled time
    # * is a special character in YAML so you have to quote this string
    - cron: '30 0 * * *'
  # Triggers the workflow on push or pull request events
 # push:
  #  branches:
  #  - 'master'
  pull_request:
    branches:
  #  - 'master'
    - '*typo*'
    - '*spell*'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "Codespell"
  Codespell:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Check spelling errors
        run: |
          pip install codespell
          wget -q https://raw.githubusercontent.com/codespell-project/codespell/master/codespell_lib/data/dictionary.txt
          wget -q https://raw.githubusercontent.com/codespell-project/codespell/master/codespell_lib/data/dictionary_rare.txt
          wget -q https://raw.githubusercontent.com/codespell-project/codespell/master/codespell_lib/data/dictionary_code.txt
          # Add further typos for continuous checks
          echo 'behavioure->behaviour' >> dictionary.txt
          echo 'blockign->blocking' >> dictionary.txt
          echo 'ate->are' >> dictionary.txt
          echo 'linve->live' >> dictionary.txt
          echo 'actuallly->actually' >> dictionary.txt
          echo 'asynchroniusly->asynchronously' >> dictionary.txt
          echo 'synchroniusly->synchronously' >> dictionary.txt
          echo 'seams->seems' >> dictionary.txt
          echo 'selelction->selection' >> dictionary.txt
          echo 'injectted->injected' >> dictionary.txt
          echo 'prepanding->prepending' >> dictionary.txt
          echo 'depanding->depending' >> dictionary.txt
          echo 'undependant->independent' >> dictionary.txt
          echo 'probablys->probably' >> dictionary.txt
          echo 'ware->were' >> dictionary.txt
          echo 'contetx->context' >> dictionary.txt
          echo 'isseu->issue' >> dictionary.txt
          echo 'issuw->issue' >> dictionary.txt
          echo 'compatybility->compatibility' >> dictionary.txt
          echo 'incompatybility->incompatibility' >> dictionary.txt
          echo 'compatybilities->compatibilities' >> dictionary.txt
          echo 'incompatybilities->incompatibilities' >> dictionary.txt
          echo 'logn->long' >> dictionary.txt
          echo 'postion->position' >> dictionary.txt
          echo 'trase->trace' >> dictionary.txt
          echo 'eider->either' >> dictionary.txt
          echo 'isoaltion->isolation' >> dictionary.txt
          echo 'symbolicl->symbolic' >> dictionary.txt
          echo 're enable->re-enable' >> dictionary.txt
          echo 'foder->folder' >> dictionary.txt
          echo 'fodername1->foldername1' >> dictionary.txt
          echo 'fodler->folder' >> dictionary.txt
          echo 'built in->built-in' >> dictionary.txt
          echo 'tigether->together' >> dictionary.txt
          echo 'auxyliary->auxiliary' >> dictionary.txt
          echo 'squating->squatting' >> dictionary.txt
          echo 'suppoter->supporter' >> dictionary.txt
          echo 'routime->routine' >> dictionary.txt
          echo 'explorere->explorer' >> dictionary.txt
          echo 'mein->main' >> dictionary.txt
          echo 'trigegred->triggered' >> dictionary.txt
          echo 'windoe->window' >> dictionary.txt
          echo 'hread->thread' >> dictionary.txt
          echo 'tamplete->template' >> dictionary.txt
          echo 'prising->praising' >> dictionary.txt
          echo 'wi->we, will, ' >> dictionary.txt
          echo 'dayly->daily' >> dictionary.txt
          echo 'erdinal->ordinal' >> dictionary.txt
          echo 'wizars->wizard' >> dictionary.txt
          echo 'pined->pinned' >> dictionary.txt
          echo 'inidcate->indicate' >> dictionary.txt
          echo 'unsoecific->unspecific' >> dictionary.txt
          echo 'soecific->specific' >> dictionary.txt
          echo 'cpecific->specific' >> dictionary.txt
          echo 'incomatible->incompatible' >> dictionary.txt
          echo 'maliciouse->malicious' >> dictionary.txt
          echo 'strickt->strict' >> dictionary.txt
          echo 'brak->break' >> dictionary.txt
          echo 'booth->both' >> dictionary.txt
          echo 'vcertificate->certificate' >> dictionary.txt
          echo 'fron->front' >> dictionary.txt
          echo 'ahndling->handling' >> dictionary.txt
          echo 'previwe->preview' >> dictionary.txt
          echo 'variouse->various' >> dictionary.txt
          echo 'resumeed->resumed' >> dictionary.txt
          echo 'autoamtic->automatic' >> dictionary.txt
          echo 'connencted->connected' >> dictionary.txt
          echo 'querygin->querying' >> dictionary.txt
          echo 'soem->some' >> dictionary.txt
          echo 'previosue->previous' >> dictionary.txt
          echo 'bfore->before' >> dictionary.txt
          echo 'lettet->letter' >> dictionary.txt
          echo 'readly->readily' >> dictionary.txt
          echo 'crome->Chrome' >> dictionary_code.txt
          echo 'chromim->Chromium' >> dictionary_code.txt
          echo 'kmdutill->kmdutil' >> dictionary_code.txt
          echo 'ancrypted->encrypted' >> dictionary_code.txt
          echo 'hadrware->hardware' >> dictionary_code.txt
          echo 'sandbocie->Sandboxie' >> dictionary_code.txt
          echo 'sanboxie->Sandboxie' >> dictionary_code.txt
          echo "sandboxies->Sandboxie's, sandboxed, " >> dictionary_code.txt
          echo 'reparese->reparse' >> dictionary_code.txt
          echo 'tailing->trailing' >> dictionary_code.txt
          # Only lowercase letters are allowed in --ignore-words-list
          codespell --dictionary=dictionary.txt --dictionary=dictionary_rare.txt --dictionary=dictionary_code.txt \
          --ignore-words-list="wil,unknwn,tolen,pevent,doubleclick,parm,parms,etcp,ois,ba,ptd,modell,namesd,stdio,uint,errorstring,ontext,atend,deque,ecounter,nmake,namess,inh,daa,varient,lite,uis,emai,ws,slanguage,woh,tne,typpos,enew,shft,seh,ser,servent,socio-economic" \
          --skip="./.git,./.github/workflows/codespell.yml,./dictionary*.txt,./Sandboxie/msgs/Text-*-*.txt,./Sandboxie/msgs/report/Report-*.txt,./SandboxiePlus/SandMan/*.ts,./Installer/Languages.iss,./Installer/isl/*.isl,./Sandboxie/common/Detours/Makefile,./Sandboxie/common/Detours/disasm.cpp,./Sandboxie/install/build.bat,./SandboxieTools/ImBox/dc/crypto_fast/xts_fast.c,./Sandboxie/apps/control/TreePropSheet.h,./Sandboxie/apps/control/PropPageFrame.h,./Sandboxie/apps/control/PropPageFrameDefault.h,./SandboxiePlus/SandMan/Troubleshooting/lang_*.json"
