diff --git a/tests/fixtures/comments/english.tsv b/tests/fixtures/comments/english.tsv new file mode 100644 index 0000000..8c526db --- /dev/null +++ b/tests/fixtures/comments/english.tsv @@ -0,0 +1,301 @@ +lang text origin +en "string", "char" (a literal of one character) or "none" tools/count_loc.py +en (ADR-0008). The workflow checks out the calling repository, fetches this file tools/quality-checks-cpp.sh +en (MIL-004 task 6). The repository is public, so no token is needed. .gitea/scoped_workflows/sync-github-metadata.yml +en (compile-commands-dir) are optional. .gitea/workflows/quality-checks-cpp.yml +en (tools/publish_wiki.py), fetched at tools-ref. .gitea/workflows/publish-wiki-pages.yml +en ----------------------------------------------------------------- helpers tests/test_quality_workflows_cpp_csharp.py +en --------------------------------------------------------------------- C# tests/test_quality_workflows_cpp_csharp.py +en --------------------------------------------------------------------- C++ tests/test_quality_workflows_cpp_csharp.py +en .c files are C; everything else (including headers) is checked as C++. tools/quality-checks-cpp.sh +en .gitmodules uses ssh:// URLs and the runner has no SSH key, so the .gitea/workflows/sync-milestones.yml +en A directory with a `python3` that runs the interpreter of the tests. tests/test_code_metrics.py +en A failure with a category. tools/publish_wiki.py +en A runner must be registered for the repository (or its organisation). .gitea/workflows/sync-milestones.yml +en A script module, readable and writable by item and by attribute. tests/workflow_source.py +en A script run: the finished process and the tool calls the stubs logged. tests/test_quality_workflows_cpp_csharp.py +en A source file or section needed for a page is missing. tools/build_wiki.py +en A translation has the same code blocks, table rows and heading levels. tests/test_build_wiki.py +en A wiki that already has pages named with spaces, as Gitea stores them. tests/test_publish_wiki.py +en ADR-0009, MIL-009: the scoped publish-wiki.yml and the marker are removed. tests/test_publish_wiki.py +en An exact stable version of the .NET SDK, 10 or later (no channel, no range). tools/quality-checks-csharp.sh +en An input is invalid; the message is printed as a `[configuration]` failure. tools/badges.py +en Answers like the Gitea repository and wiki endpoints. tests/test_publish_wiki.py +en Answers the calls of the release script and records the writes. tests/test_release.py +en Black or white, whichever has the higher contrast on the background. tools/badges.py +en Build the English wiki pages in ``docs/wiki/`` from ``README.md`` and ``guides/``. tools/build_wiki.py +en CLANG_TIDY_VERSION, QC_VENV (and QC_BIN for tests). tools/quality-checks-cpp.sh +en COVERAGE_WARN, COVERAGE_GOOD, BADGES_BRANCH, BADGES_OUT (the directory of the badge files; a temporary tools/code-metrics.sh +en Copy the badge files into the worktree and stage them; return 0 when tools/code-metrics.sh +en Copy the description and topics of a Gitea repository to its GitHub push mirror. tools/sync_github_metadata.py +en Count the code files and the lines of code of a directory (ADR-0010). tools/count_loc.py +en Count the code files under directory; see the module docstring for the result. tools/count_loc.py +en Create a release of this repository: version tag, release page, major tag. tools/release.py +en Create and update the pages; delete the others only when prune is set. tools/publish_wiki.py +en Create the release page (and with it the tag), then move the major tag. tools/release.py +en Describe the shape of a token without revealing any of its characters. tools/publish_wiki.py +en Empty on a push (a real run); "true" or "false" on a manual run. .gitea/workflows/sync-milestones.yml +en Env: SHELLCHECK, SHFMT the commands to run (default: from the PATH) tools/lint-action-scripts.sh +en Every failure is printed as ::error::[category] message. tools/code-metrics.sh +en Every failure is printed as ::error::[category] message. A key is never printed. actions/connect-wireguard/connect-wireguard.sh +en Exit: 0 every script is clean (or there is none); 1 at least one finding or tools/lint-action-scripts.sh +en Gitea keeps a hyphen in a title literal (Home-da.-.md, address Home%2Dda). tests/test_publish_wiki.py +en Gitea shows subpages only through _Sidebar, so it must reach every page. tests/test_build_wiki.py +en H2 titles to keep; None keeps the file tools/build_wiki.py +en Helpers that read workflow files and the Python embedded in them. tests/workflow_source.py +en INSTALLING THIS FILE IS THE STANDING AUTHORIZATION TO PUBLISH. This project .gitea/workflows/sync-milestones.yml +en Import a script file without running its `main` (its name is not `__main__`). tests/workflow_source.py +en Import tools/changelog.py, which sits next to this file. tools/release.py +en Import tools/publish_wiki.py. tests/workflow_source.py +en Import tools/sync_github_metadata.py. tests/workflow_source.py +en It checks the C and C++ files of the repository with clang-format and .gitea/workflows/quality-checks-cpp.yml +en It checks the C# solution or project of the repository with `dotnet format` .gitea/workflows/quality-checks-csharp.yml +en It checks the Python and shell files of the repository with pinned tools, .gitea/workflows/quality-checks.yml +en It counts the code files and the lines of code of the repository (comment .gitea/workflows/code-metrics.yml +en It needs read and write on issues and milestones, and read on the framework .gitea/workflows/sync-milestones.yml +en It runs no test, needs no secret and writes only the badges branch. .gitea/workflows/code-metrics.yml +en LANGUAGES, WORKING_DIRECTORY, RUFF_VERSION, MYPY_VERSION, tools/quality-checks.sh +en LF on every platform tests/test_lint_action_scripts.py +en Leading emoji and symbols in README headings; removed so anchors stay stable. tools/build_wiki.py +en Link text of the sidebar: English, then one list per translation code. tools/build_wiki.py +en Lint the shell scripts of the composite actions (MIL-012 task 6): shellcheck, tools/lint-action-scripts.sh +en MIL-004 Go/No-Go criterion 5: every script is a file under tools/. tests/test_workflows.py +en Markdown pages of wiki_dir to the wiki of the calling repository, creating .gitea/workflows/publish-wiki-pages.yml +en Needs: bash, find, shellcheck, shfmt tools/lint-action-scripts.sh +en No translation follows an older version of its English page. tests/test_build_wiki.py +en Offline tests for the composite action actions/connect-tailscale. tests/test_connect_tailscale.py +en Offline tests for the composite action actions/connect-wireguard. tests/test_connect_wireguard.py +en Offline tests for the parts of tools/ that the flow tests do not reach. tests/test_tool_entrypoints.py +en Offline tests for the reusable C++ and C# quality-check workflows (ADR-0008). tests/test_quality_workflows_cpp_csharp.py +en Offline tests for the reusable code-metrics workflow and tools/code-metrics.sh (ADR-0010). tests/test_code_metrics.py +en Offline tests for the reusable quality-check workflow (ADR-0005). tests/test_quality_workflow.py +en Offline tests for tools/badges.py (ADR-0010): the coverage reader and the SVG renderer. tests/test_badges.py +en Offline tests for tools/build_wiki.py. tests/test_build_wiki.py +en Offline tests for tools/changelog.py and the CHANGELOG.md of this repository. tests/test_changelog.py +en Offline tests for tools/count_loc.py (ADR-0010): hand-counted fixtures per language. tests/test_count_loc.py +en Offline tests for tools/lint-action-scripts.sh (MIL-012 task 6). tests/test_lint_action_scripts.py +en Offline tests for tools/publish_wiki.py and the publish-wiki workflows. tests/test_publish_wiki.py +en Offline tests for tools/release.py and .gitea/workflows/release.yml. tests/test_release.py +en Offline tests for tools/sync_github_metadata.py. tests/test_sync_github_metadata.py +en On a push to main that changes docs/milestones/ or docs/sqa/reviews/, this .gitea/workflows/sync-milestones.yml +en One `## [x]` section of the changelog. tools/changelog.py +en One generated wiki page. tools/build_wiki.py +en Publish accepted milestones to the git host. .gitea/workflows/sync-milestones.yml +en Publish the pages of a folder to the Gitea wiki of the repository. tools/publish_wiki.py +en Publishes the wiki of this repository from docs/wiki/ by calling the .gitea/workflows/publish-own-wiki.yml +en Publishing an empty directory would delete the whole wiki. tools/publish_wiki.py +en PyYAML reads `on` as True tests/test_code_metrics.py +en QC_DOTNET_INSTALL_SCRIPT, QC_DOTNET for tests). tools/quality-checks-csharp.sh +en Read a Cobertura coverage report and write the code metrics badges (ADR-0010). tools/badges.py +en Read, check and cut release notes from CHANGELOG.md (ADR-0006). tools/changelog.py +en Records calls and answers like the Gitea and GitHub REST APIs. tests/test_sync_github_metadata.py +en Releases this repository (ADR-0006, ADR-0007, MIL-004 task 5). It is started .gitea/workflows/release.yml +en Remove the leading emoji from a heading line. tools/build_wiki.py +en Replace urllib.request.urlopen; set `.reply` to a body or an exception. tests/test_tool_entrypoints.py +en Return (code, comment, blank) line counts of the text of a file. tools/count_loc.py +en Return (exact tag, major tag, whether the major tag moves). tools/release.py +en Return ``{file name: content}`` for every English page and the sidebar. tools/build_wiki.py +en Return a flat two-part SVG badge; the width follows the number of characters. tools/badges.py +en Return a message for every page that is missing or out of date. tools/build_wiki.py +en Return a message for every translation that is missing or stale. tools/build_wiki.py +en Return every tag name of the repository. tools/release.py +en Return every workflow file in the known workflow directories. tests/workflow_source.py +en Return one message per breach of the convention. tools/changelog.py +en Return red below warn, yellow from warn to below good, green from good. tools/badges.py +en Return the Markdown of the release page for ``version``. tools/changelog.py +en Return the boolean of the WIKI_PRUNE input: true or false, nothing else. tools/publish_wiki.py +en Return the full Markdown of one wiki page. tools/build_wiki.py +en Return the identity of a page: Gitea stores a space as a hyphen. tools/publish_wiki.py +en Return the index after the string that opens at start; the end of line if unclosed. tools/count_loc.py +en Return the keys of the pages that exist in the wiki. tools/publish_wiki.py +en Return the language of a file name by its extension, or None. tools/count_loc.py +en Return the line coverage of a Cobertura XML report as a whole percent, half up. tools/badges.py +en Return the line that links a page to its other languages. tools/build_wiki.py +en Return the lines before the first H2 and the lines of each H2 section. tools/build_wiki.py +en Return the navigation shown beside every wiki page. tools/build_wiki.py +en Return the problems of one workflow's default `tools-ref`, or []. tests/test_tools_ref.py +en Return the release page text for a version, or fail as a validation error. tools/release.py +en Return the releases in file order; text before the first one is ignored. tools/changelog.py +en Return the short content hash a translation records for its source. tools/build_wiki.py +en Return the source of each `python3 - <<'PY'` heredoc in a workflow. tests/workflow_source.py +en Return the title to send to Gitea for a page key. tools/publish_wiki.py +en Return the version as a tuple, or raise a configuration error. tools/release.py +en Return the wiki form of a link target found in ``source``. tools/build_wiki.py +en Return the workflow files of this repository that a caller can use. tests/test_tools_ref.py +en Return {page key: content} for every Markdown file in wiki_dir. tools/publish_wiki.py +en Reusable workflow (ADR-0005). A repository calls it with .gitea/workflows/quality-checks.yml +en Reusable workflow (ADR-0008). A repository calls it with .gitea/workflows/quality-checks-cpp.yml +en Reusable workflow (ADR-0009, MIL-008). A repository calls it with .gitea/workflows/publish-wiki-pages.yml +en Reusable workflow (ADR-0010). A repository calls it with .gitea/workflows/code-metrics.yml +en Run a tool as `python tools/` with only the given environment. tests/test_tool_entrypoints.py +en Run it once by hand from the Actions page with dry_run left on: it prints .gitea/workflows/sync-milestones.yml +en Run the generator; return the process exit code. tools/build_wiki.py +en Run the script with a stub wg-quick that records its arguments. tests/test_connect_wireguard.py +en SHELLCHECK_PY_VERSION, SHFMT_PY_VERSION, QC_VENV (and QC_BIN for tests). tools/quality-checks.sh +en Scan one line; return (has_code, has_comment) and update the state. tools/count_loc.py +en Scoped workflow: it runs in every repository of an organization. The script .gitea/scoped_workflows/sync-github-metadata.yml +en Secret: TOKEN_FOR_GITEA, the bare Gitea token of the organization (no JSON). .gitea/workflows/sync-milestones.yml +en Settings come from the environment, never from interpolated expressions: tools/code-metrics.sh +en Static validation of every workflow file in this repository. tests/test_workflows.py +en Steps of the composite action actions/connect-tailscale/action.yml. actions/connect-tailscale/connect-tailscale.sh +en Steps of the composite action actions/connect-wireguard/action.yml. actions/connect-wireguard/connect-wireguard.sh +en Steps of the reusable workflow .gitea/workflows/code-metrics.yml (ADR-0010). tools/code-metrics.sh +en Steps of the reusable workflow .gitea/workflows/quality-checks-cpp.yml tools/quality-checks-cpp.sh +en Steps of the reusable workflow .gitea/workflows/quality-checks-csharp.yml tools/quality-checks-csharp.sh +en Steps of the reusable workflow .gitea/workflows/quality-checks.yml (ADR-0005). tools/quality-checks.sh +en Strip heading emoji and rewrite links, leaving fenced code untouched. tools/build_wiki.py +en Succeeds when one of the named files exists in the working directory or above tools/quality-checks-cpp.sh +en TOKEN_FOR_GITEA_WIKI: ${{ secrets.TOKEN_FOR_GITEA_WIKI }} .gitea/workflows/publish-wiki-pages.yml +en TS_ARGS is split on spaces on purpose: it holds flags, never a secret actions/connect-tailscale/connect-tailscale.sh +en TS_AUTHKEY, TS_OAUTH_SECRET, TS_TAGS, TS_HOSTNAME, TS_VERSION, TS_USERSPACE, actions/connect-tailscale/connect-tailscale.sh +en TS_SHA256, TS_ARGS, TS_TIMEOUT, TS_HEALTH_CHECK_HOST. TS_TAILSCALE, actions/connect-tailscale/connect-tailscale.sh +en TS_TAILSCALED, TS_SUDO, TS_STATE_DIR, TS_START_WAIT (tries) and actions/connect-tailscale/connect-tailscale.sh +en TS_WAIT_INTERVAL (seconds) name the commands, the work folder and the waits, actions/connect-tailscale/connect-tailscale.sh +en The Home page names each workflow file of the repository and draws it. tests/test_build_wiki.py +en The `if __name__ == "__main__"` block: exit code 1 and ERROR: on stderr. tests/test_tool_entrypoints.py +en The auth key is passed to tailscale in a file of mode 600, never on a command actions/connect-tailscale/connect-tailscale.sh +en The caller file is the opt-in; there is no marker file. It publishes the .gitea/workflows/publish-wiki-pages.yml +en The comment and string rules of one language. tools/count_loc.py +en The commit is the tip of the branch and its validation run is green. tools/release.py +en The default `tools-ref` of every reusable workflow names the current major. tests/test_tools_ref.py +en The exclude patterns of the caller; a pattern without `/` matches a name anywhere. tools/count_loc.py +en The page a link to a source file should point to. The README is the home page. tools/build_wiki.py +en The pages in wiki/ match what README.md and guides/ produce. tests/test_build_wiki.py +en The reusable workflow sets WIKI_PRUNE: the caller is the opt-in (MIL-008). tests/test_publish_wiki.py +en The wiki of this repository equals docs/wiki/ (ADR-0009, MIL-008 task 4). tests/test_publish_wiki.py +en The workflow checks out the calling repository, fetches this file into tools/code-metrics.sh +en Translate an exclude pattern: `*` stops at `/`, `**` crosses it, `?` is one character. tools/count_loc.py +en Translations (ADR-0001): `.` written by hand in docs/wiki/. tools/build_wiki.py +en True when the tag holds the file; True when the tag is not in this checkout. tests/test_tools_ref.py +en Two merges in a row queue instead of racing. .gitea/workflows/sync-milestones.yml +en Usage: lint-action-scripts.sh [] (default: actions) tools/lint-action-scripts.sh +en Use the user-space implementation when the kernel has no WireGuard module, actions/connect-wireguard/connect-wireguard.sh +en WG_ALLOWED_IPS, WG_PRESHARED_KEY, WG_DNS, WG_KEEPALIVE, WG_INTERFACE, actions/connect-wireguard/connect-wireguard.sh +en WG_CONFIG, WG_PRIVATE_KEY, WG_ADDRESS, WG_PEER_PUBLIC_KEY, WG_ENDPOINT, actions/connect-wireguard/connect-wireguard.sh +en WG_HEALTH_CHECK_HOST. WG_DIR is the configuration directory (/etc/wireguard actions/connect-wireguard/connect-wireguard.sh +en WORKING_DIRECTORY, EXCLUDE, COVERAGE_REPORT, COVERAGE_ARTIFACT, tools/code-metrics.sh +en WORKING_DIRECTORY, PROJECT, DOTNET_SDK_VERSION, DOTNET_ROOT (and tools/quality-checks-csharp.sh +en WORKING_DIRECTORY, STD, COMPILE_COMMANDS_DIR, CLANG_FORMAT_VERSION, tools/quality-checks-cpp.sh +en Windows has no POSIX file modes tests/test_connect_wireguard.py +en Without a .clang-tidy, clang-tidy enables no check and refuses to run, so tools/quality-checks-cpp.sh +en Write every page; return the names of the files that changed. tools/build_wiki.py +en Write the badge files and the metrics JSON; return the paths in a fixed order. tools/badges.py +en `install` creates the venv and installs `==` versions; checked with a fake pip. tests/test_quality_workflows_cpp_csharp.py +en `ip link add` fails in the test environment, so wireguard-go must exist tests/test_connect_wireguard.py +en a breaking entry needs a new major compared with the release before it tools/changelog.py +en a called workflow has its own runner tests/test_workflows.py +en a daemon that already runs belongs to the host; this action would log it out actions/connect-tailscale/connect-tailscale.sh +en a full configuration: mask the value of every PrivateKey and PresharedKey actions/connect-wireguard/connect-wireguard.sh +en a line break would add directives (PostUp runs as root) to the file actions/connect-wireguard/connect-wireguard.sh +en a missing tool tools/lint-action-scripts.sh +en a sudo that resets the environment, as the real one does tests/test_connect_wireguard.py +en a wrapped item: the lines that continue it belong to the same item tools/changelog.py +en a.py has one code line, run.sh one tests/test_code_metrics.py +en an entry for the version. dry_run defaults to true: it checks and prints and .gitea/workflows/release.yml +en and `dotnet build` (warnings as errors) on an exact .NET SDK 10 or later, .gitea/workflows/quality-checks-csharp.yml +en and blank lines are not counted), reads an optional Cobertura XML coverage .gitea/workflows/code-metrics.yml +en and nothing when none of them changed tools/code-metrics.sh +en and shfmt in the format .editorconfig sets (two spaces, indented case labels). tools/lint-action-scripts.sh +en and updating pages, and deleting pages that are not in the folder only when .gitea/workflows/publish-wiki-pages.yml +en branches: [ main ] .gitea/workflows/publish-wiki-pages.yml +en branches: [main] .gitea/workflows/code-metrics.yml +en by default); WG_QUICK, WG_SUDO and WG_PING name the commands, for the tests. actions/connect-wireguard/connect-wireguard.sh +en by hand with the version to release; it creates the version tag, the release .gitea/workflows/release.yml +en caller a project copies from framework/templates/ci/publish-wiki.yml, with .gitea/workflows/publish-own-wiki.yml +en changes no file and needs no secret. .gitea/workflows/quality-checks.yml +en changes no file and needs no secret. The package restore needs the network. .gitea/workflows/quality-checks-csharp.yml +en clang-tidy at exact versions, changes no file and needs no secret. The .gitea/workflows/quality-checks-cpp.yml +en clang-tidy exits 0 on a warning, so every finding is made an error: a tools/quality-checks-cpp.sh +en code-metrics.sh measure count the code, read the coverage report and tools/code-metrics.sh +en code-metrics.sh publish commit the badge files to the badges branch, tools/code-metrics.sh +en code-metrics.sh validate check the inputs, before anything is counted tools/code-metrics.sh +en command line. .gitea/workflows/sync-milestones.yml +en commit is the tip of main, its validation run is green and the changelog has .gitea/workflows/release.yml +en compile-commands-dir is relative to the repository root, not to the working directory tools/quality-checks-cpp.sh +en configuration the same way. tools/quality-checks-cpp.sh +en connect-tailscale.sh down log the node out and stop tailscaled actions/connect-tailscale/connect-tailscale.sh +en connect-tailscale.sh mask print ::add-mask:: for every secret input actions/connect-tailscale/connect-tailscale.sh +en connect-tailscale.sh up install tailscale if needed, start tailscaled and join the tailnet actions/connect-tailscale/connect-tailscale.sh +en connect-wireguard.sh down take the tunnel down and delete the configuration actions/connect-wireguard/connect-wireguard.sh +en connect-wireguard.sh mask print ::add-mask:: for every secret input actions/connect-wireguard/connect-wireguard.sh +en connect-wireguard.sh up write the configuration and bring the tunnel up actions/connect-wireguard/connect-wireguard.sh +en contents: write .gitea/workflows/code-metrics.yml +en deleted. Each run updates the issues of every accepted milestone (the sync is .gitea/workflows/sync-milestones.yml +en directory under RUNNER_TEMP by default). tools/code-metrics.sh +en env keeps the userspace variable through sudo; the file holds the key, so actions/connect-wireguard/connect-wireguard.sh +en finding must fail the check, as a failing tool does for the other languages. tools/quality-checks-cpp.sh +en for the tests. actions/connect-tailscale/connect-tailscale.sh +en idempotent, but the host records the edit). .gitea/workflows/sync-milestones.yml +en installed it on 2026-10-11 at the request of S01. .gitea/workflows/sync-milestones.yml +en into shared-scripts/ and runs one command per step: tools/quality-checks-cpp.sh +en is a file of TirSystem/github-action (tools/sync_github_metadata.py), fetched .gitea/scoped_workflows/sync-github-metadata.yml +en is created or updated as a Milestone with its tasks as Issues. A Proposed .gitea/workflows/sync-milestones.yml +en it is removed when the interface does not come up actions/connect-wireguard/connect-wireguard.sh +en it, up to the top of the repository: clang-format and clang-tidy find their tools/quality-checks-cpp.sh +en latest Version History row is Accepted and whose latest review record is a Go .gitea/workflows/sync-milestones.yml +en line, and nothing else, so the rest of the log stays readable actions/connect-wireguard/connect-wireguard.sh +en line. Every failure is printed as ::error::[category] message. actions/connect-tailscale/connect-tailscale.sh +en metrics: .gitea/workflows/code-metrics.yml +en milestone, or one without a Go review, is skipped. Nothing is closed or .gitea/workflows/sync-milestones.yml +en name -> (source, code, comment, blank), counted by hand. tests/test_count_loc.py +en names that start with GITEA_ or GITHUB_. .gitea/workflows/sync-milestones.yml +en no final newline tests/test_count_loc.py +en often has no sudo. TS_SUDO overrides it (empty for none). actions/connect-tailscale/connect-tailscale.sh +en often has no sudo. WG_SUDO overrides it (empty for none). actions/connect-wireguard/connect-wireguard.sh +en on failure the captured output is the ::error:: line, which must be shown actions/connect-wireguard/connect-wireguard.sh +en only a daemon this action started is logged out and stopped actions/connect-tailscale/connect-tailscale.sh +en only the key values are masked tests/test_connect_wireguard.py +en only the probe ran: no second daemon, no up tests/test_connect_tailscale.py +en outside this repository, so it gets a copy of the repository's file tests/test_lint_action_scripts.py +en page from the changelog entry and moves the major tag, and only when the .gitea/workflows/release.yml +en parsed YAML has no fixed shape tests/test_quality_workflows_cpp_csharp.py +en paths: [ "docs/wiki/**" ] .gitea/workflows/publish-wiki-pages.yml +en permissions: .gitea/workflows/code-metrics.yml +en pretend the kernel has WireGuard and the tools are present tests/test_connect_wireguard.py +en prune is true. The script is a file of this repository .gitea/workflows/publish-wiki-pages.yml +en quality-checks-cpp.sh install install the exact clang tool versions into a venv tools/quality-checks-cpp.sh +en quality-checks-cpp.sh run run clang-format and clang-tidy on the tracked files tools/quality-checks-cpp.sh +en quality-checks-cpp.sh validate check the inputs, before anything is installed tools/quality-checks-cpp.sh +en quality-checks-csharp.sh install install the exact .NET SDK version tools/quality-checks-csharp.sh +en quality-checks-csharp.sh run run dotnet format and dotnet build on the project tools/quality-checks-csharp.sh +en quality-checks-csharp.sh validate check the inputs, before anything is installed tools/quality-checks-csharp.sh +en quality-checks.sh install install the pinned tools into a virtual environment tools/quality-checks.sh +en quality-checks.sh run run every selected tool on the tracked files tools/quality-checks.sh +en quality-checks.sh validate check the inputs, before anything is installed tools/quality-checks.sh +en quality: .gitea/workflows/quality-checks-cpp.yml +en real/a.py only, not link.py tests/test_count_loc.py +en render_config: the wg-quick configuration on stdout actions/connect-wireguard/connect-wireguard.sh +en report (an artifact of an earlier job of the caller, or a file of the .gitea/workflows/code-metrics.yml +en repository needs a .clang-format; a .clang-tidy and a compile database .gitea/workflows/quality-checks-cpp.yml +en repository) and commits three SVG badges to a branch of the calling .gitea/workflows/code-metrics.yml +en repository, which is checked out as a submodule. Gitea does not accept secret .gitea/workflows/sync-milestones.yml +en repository. .gitea/workflows/code-metrics.yml +en reusable workflow of this repository (ADR-0009, MIL-008 task 4). It is the .gitea/workflows/publish-own-wiki.yml +en secrets: .gitea/workflows/publish-wiki-pages.yml +en shared-scripts/ and runs one command per step: tools/code-metrics.sh +en shellcheck disable=SC2206 actions/connect-tailscale/connect-tailscale.sh +en shfmt reads .editorconfig from the folder upwards; a temporary folder is tests/test_lint_action_scripts.py +en something differs from the branch. tools/code-metrics.sh +en stop at the top of the repository, or at the file system root tools/quality-checks-cpp.sh +en submodules (framework, and framework/qc inside it) are fetched over HTTPS .gitea/workflows/sync-milestones.yml +en sudo is used only when the job is not root: a job container runs as root and actions/connect-tailscale/connect-tailscale.sh +en the command is required tests/test_tool_entrypoints.py +en the plan and creates nothing. Turn dry_run off only for a real run. .gitea/workflows/sync-milestones.yml +en the project gets the compiler diagnostics and the static analyzer. tools/quality-checks-cpp.sh +en the stub records its arguments and, for `up`, the content of the key file tests/test_connect_tailscale.py +en the tools are in the virtual environment of the interpreter that runs the tests tests/test_lint_action_scripts.py +en tools-ref is main so that the script that is run is the one of this commit. .gitea/workflows/publish-own-wiki.yml +en two differences: the reusable workflow is called by its local path, and .gitea/workflows/publish-own-wiki.yml +en type: ignore[index] tools/changelog.py +en type: ignore[return-value] tools/changelog.py +en uses: TirSystem/github-action/.gitea/workflows/code-metrics.yml@v2 .gitea/workflows/code-metrics.yml +en uses: TirSystem/github-action/.gitea/workflows/publish-wiki-pages.yml@v1 .gitea/workflows/publish-wiki-pages.yml +en uses: TirSystem/github-action/.gitea/workflows/quality-checks-cpp.yml@v1 .gitea/workflows/quality-checks-cpp.yml +en uses: TirSystem/github-action/.gitea/workflows/quality-checks-csharp.yml@v1 .gitea/workflows/quality-checks-csharp.yml +en uses: TirSystem/github-action/.gitea/workflows/quality-checks.yml@v1 .gitea/workflows/quality-checks.yml +en validate-workflows.yml measures tools/ and fails below the .coveragerc limit. tests/test_workflows.py +en validate-workflows.yml runs it on every pull request and push to main. tools/lint-action-scripts.sh +en variables that must reach wg-quick through sudo, which resets the environment actions/connect-wireguard/connect-wireguard.sh +en wait_for_daemon: tailscaled needs a moment to create its socket actions/connect-tailscale/connect-tailscale.sh +en which is the usual case in a Gitea runner container. actions/connect-wireguard/connect-wireguard.sh +en with a checkout so that it is readable, lintable and tested as a file .gitea/scoped_workflows/sync-github-metadata.yml diff --git a/tests/fixtures/comments/foreign.tsv b/tests/fixtures/comments/foreign.tsv new file mode 100644 index 0000000..f775cfe --- /dev/null +++ b/tests/fixtures/comments/foreign.tsv @@ -0,0 +1,139 @@ +lang text origin +da hent brugeren fra databasen written +da Denne funktion beregner totalen for kurven written +da vi skal huske at lukke forbindelsen bagefter written +da TODO: ret fejlen når listen er tom written +da returnerer sandt hvis filen findes written +da Gem resultatet i en midlertidig mappe written +da her tjekker vi om brugeren har adgang written +da læs konfigurationen fra miljøvariablerne written +da hvis der ikke er noget svar, prøver vi igen written +da Opret en ny forbindelse til serveren written +da dette er en midlertidig løsning indtil videre written +da loop gennem alle filerne og tæl linjerne written +da Vi bruger en cache for at spare tid written +da fejlbesked skal vises til brugeren written +da sorter listen efter dato, nyeste først written +da ingen grund til at gentage kaldet written +da Kontroller at tokenet ikke er udløbet written +da slet de gamle filer før vi starter written +da Her håndterer vi alle undtagelser written +da afrund til nærmeste hele tal written +da venter på at serveren bliver klar written +da Parametrene er valgfrie, standardværdien er nul written +da kald funktionen to gange for at være sikker written +da skriv loggen til disken hver time written +da Det her virker kun på Linux written +da vi springer tomme linjer over written +da opdater tælleren når en ny post kommer ind written +da fjern dubletter fra resultatet written +da Brug en kø så arbejdet ikke blokerer written +da den øverste mappe i projektet written +da gennemløb træet fra roden og ned written +da Denne klasse holder styr på sessionerne written +da hvis navnet er tomt, brug standardnavnet written +da tjek om porten er optaget written +da Beregn gennemsnittet af de sidste ti målinger written +da vi skal have en bedre løsning her senere written +da Sæt tiden til midnat written +da læser hele filen ind i hukommelsen written +da Pas på, her kan der opstå en kapløbstilstand written +da flyt filen til arkivmappen written +da Dette er kun til test written +da slå op i tabellen efter navn written +da henter næste side af resultaterne written +da hvorfor gør vi det her? Fordi serveren kræver det written +da gem ændringerne og luk vinduet written +ms dapatkan pengguna daripada pangkalan data written +ms Fungsi ini mengira jumlah bagi troli written +ms kita perlu ingat untuk menutup sambungan selepas itu written +ms TODO: betulkan ralat apabila senarai kosong written +ms mengembalikan benar jika fail wujud written +ms Simpan hasil dalam folder sementara written +ms di sini kita semak sama ada pengguna mempunyai akses written +ms baca konfigurasi daripada pemboleh ubah persekitaran written +ms jika tiada jawapan, kita cuba lagi written +ms Buat sambungan baharu ke pelayan written +ms ini penyelesaian sementara buat masa ini written +ms ulang semua fail dan kira baris written +ms Kita guna cache untuk jimat masa written +ms mesej ralat mesti dipaparkan kepada pengguna written +ms susun senarai mengikut tarikh, yang terbaru dahulu written +ms tidak perlu mengulang panggilan written +ms Semak bahawa token belum tamat tempoh written +ms padam fail lama sebelum kita mulakan written +ms Di sini kita mengendalikan semua pengecualian written +ms bundarkan kepada nombor bulat yang terdekat written +ms menunggu pelayan sedia written +ms Parameter adalah pilihan, nilai lalai ialah sifar written +ms panggil fungsi dua kali untuk pastikan written +ms tulis log ke cakera setiap jam written +ms Ini hanya berfungsi pada Linux written +ms kita langkau baris kosong written +ms kemas kini pembilang apabila rekod baharu masuk written +ms buang pendua daripada hasil written +ms Guna giliran supaya kerja tidak menyekat written +ms folder teratas dalam projek written +ms lalui pokok dari akar ke bawah written +ms Kelas ini menjejaki sesi written +ms jika nama kosong, guna nama lalai written +ms semak sama ada port sedang digunakan written +ms Kira purata sepuluh ukuran terakhir written +ms kita perlukan penyelesaian yang lebih baik nanti written +ms Tetapkan masa kepada tengah malam written +ms membaca seluruh fail ke dalam memori written +ms Awas, di sini boleh berlaku keadaan perlumbaan written +ms alihkan fail ke folder arkib written +ms Ini hanya untuk ujian written +ms cari dalam jadual mengikut nama written +ms mendapatkan halaman seterusnya bagi hasil written +ms kenapa kita buat begini? Kerana pelayan memerlukannya written +ms simpan perubahan dan tutup tetingkap written +de Hole den Benutzer aus der Datenbank written +de Diese Funktion berechnet die Summe des Warenkorbs written +de wir müssen die Verbindung danach schließen written +de Gibt wahr zurück, wenn die Datei existiert written +de Speichere das Ergebnis in einem temporären Ordner written +de hier prüfen wir, ob der Benutzer Zugriff hat written +de Lies die Konfiguration aus den Umgebungsvariablen written +de wenn keine Antwort kommt, versuchen wir es erneut written +de Das ist nur eine vorläufige Lösung written +de Fehlermeldung muss dem Benutzer angezeigt werden written +de lösche die alten Dateien, bevor wir anfangen written +de Achtung, hier kann ein Wettlauf entstehen written +sv hämta användaren från databasen written +sv Den här funktionen räknar ut summan av varukorgen written +sv vi måste stänga anslutningen efteråt written +sv returnerar sant om filen finns written +sv Spara resultatet i en tillfällig mapp written +sv här kontrollerar vi om användaren har åtkomst written +sv läs konfigurationen från miljövariablerna written +sv om det inte kommer något svar försöker vi igen written +sv Det här är bara en tillfällig lösning written +sv felmeddelandet ska visas för användaren written +sv ta bort de gamla filerna innan vi börjar written +sv Se upp, här kan det uppstå en tävlingssituation written +no hent brukeren fra databasen written +no Denne funksjonen beregner summen av handlekurven written +no vi må huske å lukke forbindelsen etterpå written +no returnerer sant hvis filen finnes written +no Lagre resultatet i en midlertidig mappe written +no her sjekker vi om brukeren har tilgang written +no les konfigurasjonen fra miljøvariablene written +no hvis det ikke kommer noe svar, prøver vi igjen written +no Dette er bare en midlertidig løsning written +no feilmeldingen skal vises til brukeren written +no slett de gamle filene før vi begynner written +no Pass på, her kan det oppstå en kappløpstilstand written +fr récupère l'utilisateur depuis la base de données written +fr Cette fonction calcule le total du panier written +fr il faut penser à fermer la connexion ensuite written +fr renvoie vrai si le fichier existe written +fr Enregistre le résultat dans un dossier temporaire written +fr ici on vérifie si l'utilisateur a accès written +fr lit la configuration depuis les variables d'environnement written +fr s'il n'y a pas de réponse, on réessaie written +fr Ce n'est qu'une solution provisoire written +fr le message d'erreur doit être affiché à l'utilisateur written +fr supprime les anciens fichiers avant de commencer written +fr Attention, une condition de concurrence peut survenir ici written