{"id":19107978,"url":"https://github.com/rt-thread/pkgs-test","last_synced_at":"2025-07-30T01:15:36.687Z","repository":{"id":146716152,"uuid":"584603506","full_name":"RT-Thread/pkgs-test","owner":"RT-Thread","description":"The RT-Thread package testing tool","archived":false,"fork":false,"pushed_at":"2025-01-17T01:57:06.000Z","size":68,"stargazers_count":9,"open_issues_count":0,"forks_count":10,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-04-30T18:51:32.059Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RT-Thread.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-01-03T03:14:05.000Z","updated_at":"2025-02-20T10:17:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"ea4f8d0b-9e5c-4abf-8f89-25e2eecad4a2","html_url":"https://github.com/RT-Thread/pkgs-test","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RT-Thread/pkgs-test","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RT-Thread%2Fpkgs-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RT-Thread%2Fpkgs-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RT-Thread%2Fpkgs-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RT-Thread%2Fpkgs-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RT-Thread","download_url":"https://codeload.github.com/RT-Thread/pkgs-test/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RT-Thread%2Fpkgs-test/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267791113,"owners_count":24144909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T04:14:34.757Z","updated_at":"2025-07-30T01:15:36.640Z","avatar_url":"https://github.com/RT-Thread.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pkgs-test 测试框架\n\n## Github Actions使用\n\n### 用法\n\n``` yml\njobs:\n  pkgs-test:\n    uses: RT-Thread/pkgs-test/.github/workflows/pkgs-action.yml@main\n    with:\n      # 指定测试的rt-thread内核版本 使用空格分隔\n      # branch \"branch:[branch]\" tag \"tag:[tag]\"\n      # 默认值为 \"branch:master tag:v4.1.1\"\n      rt-thread-versions: \"branch:master tag:v4.1.1\"\n\n      # 指定测试的bsp 使用空格分隔\n      # [bsp]:[toolchain]\n      # 默认值为 \"qemu-vexpress-a9:sourcery-arm stm32/stm32h750-artpi:sourcery-arm k210:sourcery-riscv-none-embed\"\n      bsps: \"qemu-vexpress-a9:sourcery-arm stm32/stm32h750-artpi:sourcery-arm k210:sourcery-riscv-none-embed\"\n\n      # 指定测试的软件包 使用空格或者换行符分隔 仅仅test-specific-pkgs为true时可用。\n      # 多行输入可以这样输入\n      # pkgs: |\n      #     hello\n      #     LiteOS-SDK\n      # 默认值是 \"hello\"\n      pkgs: \"hello\"\n      \n      # 用于测试指定的软件包，用于对rt-thread内核更新的检查，通过参数pkgs指定软件包。\n      # 默认值为false，不指定。\n      test-specific-pkgs: false\n\n      # 测试package时是否测试latest版本，false时测试latest版本。\n      # 默认值为 false\n      package-test-nolatest: false\n      \n      # 测试全部的package，true为测试全部。\n      # 默认值为 false\n      package-test-all: false\n\n      # 是否执行check-errors，true为检查。\n      # 默认值为 true\n      check-errors: true\n\n      # 是否从githubpages下载旧的测试结果，并将新的测试结果与其合并，true为下载并合并。\n      # 默认值为 false\n      package-append-res: false\n\n      # 旧测试结果的githubpages地址。\n      # 默认值为 https://rt-thread.github.io/packages/\n      pages-url: https://rt-thread.github.io/packages/\n\n      # 是否将测试结果发布到githubpages，true是发布。\n      # 默认值为 false\n      deploy-pages: false\n```\n目前可以在软件包索引仓库和软件包仓库使用pkgs-test来测试软件包的编译情况。\n\n### Packages仓库\n\n软件包索引仓库里面目前有两个功能，一个是当发生改动的时候测试改动的软件包，另外就是定时测试全部的软件包。\n\n#### 改动测试\n\n这里是Packages仓库的软件包测试workflow文件其中的一个job，目的是当发生改动的时候测试改动的软件包。\n\n```yml\n change:\n        if: ${{ github.event_name == 'pull_request' || github.event_name == 'push'}}\n        uses: RT-Thread/pkgs-test/.github/workflows/pkgs-action.yml@main\n        with:\n            package-append-res: true\n            deploy-pages: true\n```\n\n这里使用if进行了判断，当workflow的触发事件是pull_request或者push的时候，执行change这个job。\n\n传入的参数有两个，package-append-res用来开启从github pages下载旧的测试结果并且与新的合并，deploy-pages用来开启将测试结果发布到github pagses。\n\n#### 定时全部测试\n\n这里我举出两个jobs的例子，测试master内核版本下两个bsp的软件包编译情况。\n\n``` yml\n  master-stm32h750-artpi-test:\n        if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'}}\n        uses: RT-Thread/pkgs-test/.github/workflows/pkgs-action.yml@main\n        with:\n            bsps: stm32/stm32h750-artpi:sourcery-arm\n            rt-thread-versions: branch:master\n            package-append-res: true\n            package-test-all: true\n            deploy-pages: true\n            check-errors: false\n\n    master-k210-test:\n        if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'}}\n        needs: master-stm32h750-artpi-test\n        uses: RT-Thread/pkgs-test/.github/workflows/pkgs-action.yml@main\n        with:\n            bsps: k210:sourcery-riscv-none-embed\n            rt-thread-versions: branch:master\n            package-append-res: true\n            package-test-all: true\n            deploy-pages: true\n            check-errors: false\n```\n\n测试全部软件包的触发事件有两个，schedule定时测试和workflow_dispatch手动触发，这里也是使用if来判断的。\n\n这里注意一下，测试全部软件包需要一个接着一个按顺序测试，不能并行进行测试，不然发布测试结果会产生冲突，workflow文件也用了concurrency这个参数来确保每次只有一个workflow在运行，让其余的进行等待。\n\n``` yml\nconcurrency:\n    group: pkgs-test\n    cancel-in-progress: false # wait for finish.\n```\n\n然后解释一下传入的参数。\n\n1. bsps指的就是测试的bsp和其使用的工具链，用冒号进行分隔。\n2. rt-thread-versions指的就是内核的版本，branch和tag有两种不同的输入方法`branch:master tag:v4.1.1`\n3. package-append-res表示的是从github pages下载旧的测试结果并且与新的合并。\n4. package-test-all就是最主要的一个参数，表示测试全部软件包。\n5. deploy-pages表示发布测试结果到GitHub pages。\n6. check-errors表示关闭错误检查，这里是因为主要目的是发布测试结果，所以用不需要检查是否有软件包没有通过编译测试。\n\n### 软件包仓库\n\n软件包仓库的使用方法比较简单，不需要输入任何参数，它的测试过程和本地测试基本上一致。\n\n这里有一个例子，[https://github.com/RT-Thread-packages/hello](https://github.com/RT-Thread-packages/hello)\n\n它的workflow文件是这样的。\n\n``` yml\nname: RT-Thread_Packages_Test\n\non:\n  [push, pull_request]\n\njobs:\n  pkgs-test:\n    uses: RT-Thread/pkgs-test/.github/workflows/pkgs-action.yml@main\n```\n## 本地使用\n注意事项：\n1. 本测试框架暂时只使用在 linux 电脑上，不支持 Windows，但 Windows 的 wsl2 暂时测试通过，但不排除有什么隐藏问题\n2. 本测试框架使用 gcc 进行编译，不支持 gcc 的 bsp 将不会通过测试\n\n用户使用前应使用如下命令安装 pip 依赖\n\n```shell\npip install scons==4.4.0 requests tqdm wget dominate PyGithub pytz\n```\n\n其命令行参数如下所示\n\n`--config` 加载用户配置文件 默认 config.json\n\n`--pkg` 测试单独软件包 xxx:xxx\n\n`--nolatest` 编译内容是否不包含 latest 版本\n\n`-j` 同时编译的作业数量。默认 16\n\n### 用户使用\n\n1. 可直接使用 python3 pkgs-test.py 执行 config.json 中的配置文件来进行默认 hello 软件包的测试\n2. 用户也可更改 config.json 文件中的 pkgs 字段来测试其他软件包\n3. 也可通过 --config 指定一个配置文件进行测试\n4. 可以通过 config subparser 对配置文件进行配置\n5. 也可以通过 check subparser 检查测试结果\n\n\n### 执行测试\n\n#### 针对于不同使用用户所使用的的测试命令\n\n- 软件包开发者：测试软件包所支持的 bsp、rtt 版本\n  - 软件包版本发布测试\n    - 可以对指定软件包版本，进行所支持的 bsp、rtt 版本测试\n        ```python\n            python3 pkgs-test.py --pkg=hello:v1.0.0\n        ```\n  - 软件包 master 测试 ci\n    - 可以在更新软件包代码之后，自动对 master 版本进行所支持的 bsp、rtt 版本测试\n        ```python\n            python3 pkgs-test.py --pkg=hello:latest\n        ```\n  - 软件包的所有版本测试\n    - 可以对指定软件包的所有版本，进行所支持的 bsp、rtt 版本测试\n        ```python\n            python3 pkgs-test.py --pkg=hello\n        ```\n  - 开发者所有软件包测试\n    - 可以对指定软件包集合的所有软件包版本，进行所支持的 bsp、rtt 版本测试\n        首先改动 config.json 中的 pkgs 字段，例如您要测试 hello1 hello2 两个软件包，要把 pkgs 字段改为 `\"pkgs\":[\"hello1\",\"hello2\"]`\n        之后使用下面的命令\n        ```python\n            python3 pkgs-test.py\n        ```\n\n#### 部分示例\n\n1. 只测试 hello 的 v1.0.0 版本\n    ```shell\n    python3 pkgs-test.py --pkg=hello:v1.0.0\n    ```\n   等同于配置文件中的\n    ```json\n    \"pkgs\":[\n    \"hello:v1.0.0\"\n    ],\n    ```\n2. 测试多个软件包（修改配置文件中的 pkgs 字段）\n    ```json\n    \"pkgs\":[\n    \"pkg1\",\n    \"pkg2\",\n    \"pkg3\",\n    ],\n    ```\n\n### 使用config设置配置文件\n- 设置rt-thread内核版本\n  - 单个版本\n    ```shell\n    python pkgs-test.py config --rtthread=branch:master\n    ```\n  - 多个版本\n    ```shell\n    python pkgs-test.py config --rtthread=\"branch:master tag:v4.1.1\"\n    ```\n- 设置bsp\n  - 单个版本\n    ```shell\n    python pkgs-test.py config --bsps=qemu-vexpress-a9:sourcery-arm\n    ```\n  - 多个版本\n    ```shell\n    python pkgs-test.py config --rtthread=\"qemu-vexpress-a9:sourcery-arm stm32/stm32h750-artpi:sourcery-arm\"\n    ```\n- 指定配置文件\n    ```shell\n    python pkgs-test.py config  --rtthread=branch:master --file=config.json\n    ```\n- 指定软件包\n    ```shell\n    python pkgs-test.py config --pkgs=\"hello\"\n    ```\n\n### 使用check检查测试结果\n- 检查自动生成的测试结果\n    ```shell\n    python pkgs-test.py check\n    ```\n- 指定文件路径\n    ```shell\n    python pkgs-test.py check --file='pkgs_res_single.json'\n    ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frt-thread%2Fpkgs-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frt-thread%2Fpkgs-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frt-thread%2Fpkgs-test/lists"}