From 54e8045d5fd28f49f0b89c33ea732e782284a253 Mon Sep 17 00:00:00 2001 From: Sergei Petrosian Date: Fri, 7 Feb 2025 15:55:39 +0100 Subject: [PATCH] ci: Replace woke with codespell woke has been left with Noriko's and all other PRs not being reviewed for years, hence we have been using our fork. This PR replaces woke with codespell to detect non-inclusive language and check spelling Codespell provides a built-in dictionary with recommended non-inclusive terms: https://github.com/codespell-project/codespell/blob/main/codespell_lib/data/dictionary_usage.txt Codespell supports using custom dictionaries so we can add to the list if we want. `ignore-multiline-regex` in the `.codespellrc` config allows for disabling codespell for a block of lines: ``` # codespell:ignore-begin ... codespell will not look at this text. # codespell:ignore-end ``` You can ignore words inline by adding a comment like `# codespell:ignore word`. You can ignore files and directories, and words by adding them to config file `.codespellrc`. For more information about inclusive naming initiative, see https://inclusivenaming.org/about/ Signed-off-by: Sergei Petrosian --- .ansible-lint | 2 -- .codespell_ignores | 0 .codespellrc | 4 +++ .github/workflows/ansible-lint.yml | 35 ++++++++++++++++++- .github/workflows/ansible-test.yml | 2 +- .github/workflows/codespell.yml | 17 +++++++++ .../detect_non_inclusive_language.yml | 27 ++++++++++++++ .github/workflows/woke.yml | 20 ----------- README.md | 2 +- 9 files changed, 84 insertions(+), 25 deletions(-) create mode 100644 .codespell_ignores create mode 100644 .codespellrc create mode 100644 .github/workflows/codespell.yml create mode 100644 .github/workflows/detect_non_inclusive_language.yml delete mode 100644 .github/workflows/woke.yml diff --git a/.ansible-lint b/.ansible-lint index af4e5cf..2e3b1fe 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -20,8 +20,6 @@ exclude_paths: - .github/ - .markdownlint.yaml - examples/roles/ -mock_modules: - - community.general.ini_file mock_roles: - linux-system-roles.tlog supported_ansible_also: diff --git a/.codespell_ignores b/.codespell_ignores new file mode 100644 index 0000000..e69de29 diff --git a/.codespellrc b/.codespellrc new file mode 100644 index 0000000..4f0f759 --- /dev/null +++ b/.codespellrc @@ -0,0 +1,4 @@ +[codespell] +ignore-multiline-regex = codespell:ignore-begin.*codespell:ignore-end +context = 0 +ignore-words = .codespell_ignores diff --git a/.github/workflows/ansible-lint.yml b/.github/workflows/ansible-lint.yml index d0ee41b..666b231 100644 --- a/.github/workflows/ansible-lint.yml +++ b/.github/workflows/ansible-lint.yml @@ -35,15 +35,48 @@ jobs: pip3 install "git+https://github.com/linux-system-roles/tox-lsr@3.4.0" - name: Convert role to collection format + id: collection run: | set -euxo pipefail TOXENV=collection lsr_ci_runtox coll_dir=".tox/ansible_collections/$LSR_ROLE2COLL_NAMESPACE/$LSR_ROLE2COLL_NAME" + # cleanup after collection conversion + rm -rf "$coll_dir/.ansible" .tox/ansible-plugin-scan # ansible-lint action requires a .git directory??? # https://github.com/ansible/ansible-lint/blob/main/action.yml#L45 mkdir -p "$coll_dir/.git" + meta_req_file="${{ github.workspace }}/meta/collection-requirements.yml" + test_req_file="${{ github.workspace }}/tests/collection-requirements.yml" + if [ -f "$meta_req_file" ] && [ -f "$test_req_file" ]; then + coll_req_file="${{ github.workspace }}/req.yml" + python -c 'import sys; import yaml + hsh1 = yaml.safe_load(open(sys.argv[1])) + hsh2 = yaml.safe_load(open(sys.argv[2])) + coll = {} + for item in hsh1["collections"] + hsh2["collections"]: + if isinstance(item, dict): + name = item["name"] + rec = item + else: + name = item # assume string + rec = {"name": name} + if name not in coll: + coll[name] = rec + hsh1["collections"] = list(coll.values()) + yaml.safe_dump(hsh1, open(sys.argv[3], "w"))' "$meta_req_file" "$test_req_file" "$coll_req_file" + echo merged "$coll_req_file" + cat "$coll_req_file" + elif [ -f "$meta_req_file" ]; then + coll_req_file="$meta_req_file" + elif [ -f "$test_req_file" ]; then + coll_req_file="$test_req_file" + else + coll_req_file="" + fi + echo "coll_req_file=$coll_req_file" >> $GITHUB_OUTPUT - name: Run ansible-lint - uses: ansible/ansible-lint@v24 + uses: ansible/ansible-lint@v25 with: working_directory: ${{ github.workspace }}/.tox/ansible_collections/${{ env.LSR_ROLE2COLL_NAMESPACE }}/${{ env.LSR_ROLE2COLL_NAME }} + requirements_file: ${{ steps.collection.outputs.coll_req_file }} diff --git a/.github/workflows/ansible-test.yml b/.github/workflows/ansible-test.yml index 4dbdaa2..c9868a2 100644 --- a/.github/workflows/ansible-test.yml +++ b/.github/workflows/ansible-test.yml @@ -43,6 +43,6 @@ jobs: - name: Run ansible-test uses: ansible-community/ansible-test-gh-action@release/v1 with: - testing-type: sanity # wokeignore:rule=sanity + testing-type: sanity ansible-core-version: stable-2.17 collection-src-directory: ${{ github.workspace }}/.tox/ansible_collections/${{ env.LSR_ROLE2COLL_NAMESPACE }}/${{ env.LSR_ROLE2COLL_NAME }} diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml new file mode 100644 index 0000000..8eadb61 --- /dev/null +++ b/.github/workflows/codespell.yml @@ -0,0 +1,17 @@ +# Codespell configuration is within .codespellrc +--- +name: Codespell +on: # yamllint disable-line rule:truthy + - pull_request +permissions: + contents: read +jobs: + codespell: + name: Check for spelling errors + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Codespell + uses: codespell-project/actions-codespell@v2 diff --git a/.github/workflows/detect_non_inclusive_language.yml b/.github/workflows/detect_non_inclusive_language.yml new file mode 100644 index 0000000..ae49baf --- /dev/null +++ b/.github/workflows/detect_non_inclusive_language.yml @@ -0,0 +1,27 @@ +# Codespell configuration is within .codespellrc +--- +name: Detect non-inclusive language +on: # yamllint disable-line rule:truthy + - pull_request +permissions: + contents: read +jobs: + codespell: + name: Detect non-inclusive language + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Get variable with regex values + id: regexvar + run: | + curl -L -s -o dictionary_usage.txt https://raw.githubusercontent.com/codespell-project/codespell/refs/heads/main/codespell_lib/data/dictionary_usage.txt + regexvar=$(sed 's/->.*//g' dictionary_usage.txt | sed 's/$/|/' | tr -d '\n' | sed 's/.$//') + rm dictionary_usage.txt + echo "regex = $regexvar" >> .codespellrc + + - name: Detect non-inclusive language with codespell + uses: codespell-project/actions-codespell@v2 + with: + builtin: usage diff --git a/.github/workflows/woke.yml b/.github/workflows/woke.yml deleted file mode 100644 index 4cded0d..0000000 --- a/.github/workflows/woke.yml +++ /dev/null @@ -1,20 +0,0 @@ ---- -# yamllint disable rule:line-length -name: Woke -on: # yamllint disable-line rule:truthy - - pull_request -jobs: - woke: - name: Detect non-inclusive language - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Run lsr-woke-action - # Originally, uses: get-woke/woke-action@v0 - uses: linux-system-roles/lsr-woke-action@main - with: - woke-args: "-c https://raw.githubusercontent.com/linux-system-roles/tox-lsr/main/src/tox_lsr/config_files/woke.yml --count-only-error-for-failure" - # Cause the check to fail on any broke rules - fail-on-error: true diff --git a/README.md b/README.md index 043b201..a14916f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # tlog -[![ansible-lint.yml](https://github.com/linux-system-roles/tlog/actions/workflows/ansible-lint.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/ansible-lint.yml) [![ansible-test.yml](https://github.com/linux-system-roles/tlog/actions/workflows/ansible-test.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/ansible-test.yml) [![markdownlint.yml](https://github.com/linux-system-roles/tlog/actions/workflows/markdownlint.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/markdownlint.yml) [![tft.yml](https://github.com/linux-system-roles/tlog/actions/workflows/tft.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/tft.yml) [![tft_citest_bad.yml](https://github.com/linux-system-roles/tlog/actions/workflows/tft_citest_bad.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/tft_citest_bad.yml) [![woke.yml](https://github.com/linux-system-roles/tlog/actions/workflows/woke.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/woke.yml) +[![ansible-lint.yml](https://github.com/linux-system-roles/tlog/actions/workflows/ansible-lint.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/ansible-lint.yml) [![ansible-test.yml](https://github.com/linux-system-roles/tlog/actions/workflows/ansible-test.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/ansible-test.yml) [![codespell.yml](https://github.com/linux-system-roles/tlog/actions/workflows/codespell.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/codespell.yml) [![detect_non_inclusive_language.yml](https://github.com/linux-system-roles/tlog/actions/workflows/detect_non_inclusive_language.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/detect_non_inclusive_language.yml) [![markdownlint.yml](https://github.com/linux-system-roles/tlog/actions/workflows/markdownlint.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/markdownlint.yml) [![tft.yml](https://github.com/linux-system-roles/tlog/actions/workflows/tft.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/tft.yml) [![tft_citest_bad.yml](https://github.com/linux-system-roles/tlog/actions/workflows/tft_citest_bad.yml/badge.svg)](https://github.com/linux-system-roles/tlog/actions/workflows/tft_citest_bad.yml) This role configures a system for [Terminal session recording](https://github.com/scribery). The role will configure tlog to log