{"id":20280438,"url":"https://github.com/jrmadsen/pyctest","last_synced_at":"2025-04-11T06:36:48.331Z","repository":{"id":40680477,"uuid":"136476975","full_name":"jrmadsen/pyctest","owner":"jrmadsen","description":"Python bindings of select portions of CMake/CTest package -- enabling generation of CTest test files from Python without a CMake build system","archived":false,"fork":false,"pushed_at":"2022-06-29T04:23:05.000Z","size":1421,"stargazers_count":4,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-25T04:32:39.716Z","etag":null,"topics":["cmake","cmake-modules","cmake-resources","cmake-scripts","cmake-toolchain","cmake-toolchains","cpack","ctest","ctest-extension","cxx","pybind11","python","test-automation","test-driven-development","test-framework","test-runner","testing","testing-framework","testing-tools"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jrmadsen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-07T12:52:30.000Z","updated_at":"2025-01-06T08:38:14.000Z","dependencies_parsed_at":"2022-07-27T16:02:40.239Z","dependency_job_id":null,"html_url":"https://github.com/jrmadsen/pyctest","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrmadsen%2Fpyctest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrmadsen%2Fpyctest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrmadsen%2Fpyctest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrmadsen%2Fpyctest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jrmadsen","download_url":"https://codeload.github.com/jrmadsen/pyctest/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247976133,"owners_count":21027014,"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","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":["cmake","cmake-modules","cmake-resources","cmake-scripts","cmake-toolchain","cmake-toolchains","cpack","ctest","ctest-extension","cxx","pybind11","python","test-automation","test-driven-development","test-framework","test-runner","testing","testing-framework","testing-tools"],"created_at":"2024-11-14T13:35:38.220Z","updated_at":"2025-04-11T06:36:48.287Z","avatar_url":"https://github.com/jrmadsen.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PyCTest\n\n| Travis | AppVeyor |\n| ------ | -------- |\n| [![Build Status](https://travis-ci.org/jrmadsen/pyctest.svg?branch=master)](https://travis-ci.org/jrmadsen/pyctest) | [![Build status](https://ci.appveyor.com/api/projects/status/p7m76ovx7sg781pf/branch/master?svg=true)](https://ci.appveyor.com/project/jrmadsen/pyctest/branch/master) |\n\n[PyCTest Documentation (readthedocs)](https://pyctest.readthedocs.io/en/latest/)\n================================================================================\n\n## GitHub\n\n- `git clone https://github.com/jrmadsen/pyctest.git`\n\n## PyPi\n\n- `pip install pyctest`\n\n## Anaconda Cloud\n\n- `conda install -c jrmadsen pyctest`\n\n| Name | Version | Platforms | Downloads |\n| --- | --- | --- | --- |\n| [![Conda Recipe](https://img.shields.io/badge/recipe-pyctest-green.svg)](https://anaconda.org/jrmadsen/pyctest) | [![Anaconda-Server Badge](https://anaconda.org/jrmadsen/pyctest/badges/version.svg)](https://anaconda.org/jrmadsen/pyctest) | [![Anaconda-Server Badge](https://anaconda.org/jrmadsen/pyctest/badges/platforms.svg)](https://anaconda.org/jrmadsen/pyctest) | [![Anaconda-Server Badge](https://anaconda.org/jrmadsen/pyctest/badges/downloads.svg)](https://anaconda.org/jrmadsen/pyctest) |\n\n## conda-forge\n\n- `conda install -c conda-forge pyctest`\n\n| Name | Version | Platforms | Downloads |\n| --- | --- | --- | --- |\n| [![Conda Recipe](https://img.shields.io/badge/recipe-pyctest-green.svg)](https://anaconda.org/conda-forge/pyctest) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/pyctest.svg)](https://anaconda.org/conda-forge/pyctest) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/pyctest.svg)](https://anaconda.org/conda-forge/pyctest) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/pyctest.svg)](https://anaconda.org/conda-forge/pyctest) |\n\nBenefits\n========\n\n- Integration into continuous integration systems (e.g. Travis, AppVeyor, CircleCI, etc.) and pushing to CDash dashboard will combine all the results in one place\n  - The warnings and errors are enumerated in CDash (no more parsing stdout logs for errors)\n- Easily create platform-independent testing\n- No need to migrate build system to CMake -- just specify `pyctest.BUILD_COMMAND`\n\nGeneral Setup\n=============\n\n- Add PyCTest to conda environment: `conda install pyctest`\n- Write a driver Python script, e.g. `pyctest-runner.py`, in top of the source code tree\n\n## Example for Python project\n\nThe following is an example for a Python code with a compiled C extension that uses `nosetests` for unit-testing:\n\n```python\n#!/usr/bin/env python\n\nimport os, sys, platform\nimport pyctest.pyctest as pyctest\nimport pyctest.helpers as helpers\n\nparser = helpers.ArgumentParser(\"ProjectName\", source_dir=os.getcwd(),binary_dir=os.getcwd(), vcs_type=\"git\")\nargs = parser.parse_args()\n\npyctest.BUILD_NAME = \"{}\".format(args.build)\npyctest.BUILD_COMMAND = \"python setup.py build_ext --inplace\"\n\ntest = pyctest.test()\ntest.SetName(\"unittest\")\n# insert the command to run the tests for project\ntest.SetCommand([\"nosetests\"])\n\npyctest.run()\n```\n\n## Example for autotools project\n\n```python\n#!/usr/bin/env python\n\nimport os, sys, platform\nimport multiprocessing as mp\nimport pyctest.pyctest as pyctest\nimport pyctest.helpers as helpers\n\nparser = helpers.ArgumentParser(\"ProjectName\", source_dir=os.getcwd(), binary_dir=os.getcwd(),\n                                vcs_type=\"git\")\nparser.add_argument(\"-n\", \"--build\", type=str, required=True, help=\"Build name for identification\")\nargs = parser.parse_args()\n\n# CONFIGURE_COMMAND can only run one command so if autogen is required, just execute it here\ncmd = pyctest.command([\"./autogen.sh\"])\ncmd.SetWorkingDirectory(pyctest.SOURCE_DIRECTORY)\ncmd.SetErrorQuiet(False)\ncmd.Execute()\n\npyctest.BUILD_NAME = \"{}\".format(args.build)\npyctest.CONFIGURE_COMMAND = \"./configure\"\npyctest.BUILD_COMMAND = \"make -j{}\".format(mp.cpu_count())\n\ntest = pyctest.test()\ntest.SetName(\"unittest\")\n# insert the command to run the tests for project\ntest.SetCommand([\"./run-testing.sh\"])\n\npyctest.run()\n```\n\n## Example for CMake project\n\n```python\n#!/usr/bin/env python\n\nimport os\nimport sys\nimport platform\nimport multiprocessing as mp\nimport pyctest.pyctest as pyctest\nimport pyctest.helpers as helpers\n\nbinary_dir = os.path.join(os.getcwd(), \"build-ProjectName\")\nparser = helpers.ArgumentParser(\"ProjectName\", os.getcwd(), binary_dir)\nparser.add_argument(\"-n\", \"--build\", type=str, required=True, help=\"Build name for identification\")\nargs = parser.parse_args()\n\npyctest.BUILD_NAME = \"{}\".format(args.build)\npyctest.UPDATE_COMMAND = \"git\"\npyctest.CONFIGURE_COMMAND = \"cmake {}\".format(pyctest.SOURCE_DIRECTORY)\npyctest.BUILD_COMMAND = \"cmake --build {} --target all -- -j{}\".format(pyctest.BINARY_DIRECTORY, mp.cpu_count())\n\ntest = pyctest.test()\ntest.SetName(\"unittest\")\n# insert the command to run the tests for project\ntest.SetCommand([\"./run-testing.sh\"])\n\npyctest.run()\n```\n\n### Python Modules\n\n- `import pyctest` -- global package\n- `import pyctest.pyctest` -- CTest module\n- `import pyctest.pycmake` -- CMake module\n- `import pyctest.helpers` -- Helpers module\n  - includes command line arguments (`argparse`) for PyCTest\n\n### Direct Access to CMake/CTest/CPack Executables\n\n- `python -m pyctest.cmake \u003cARGS\u003e` == `cmake \u003cARGS\u003e`\n- `python -m pyctest.ctest \u003cARGS\u003e` == `ctest \u003cARGS\u003e`\n- `python -m pyctest.cpack \u003cARGS\u003e` == `cpack \u003cARGS\u003e`\n\nFollowing Python code:\n```python\nfrom pyctest.ctest import CTest\nfrom pyctest.cmake import CMake\nfrom pyctest.cpack import CPack\n\nCMake({\"CMAKE_BUILD_TYPE\":\"Release\"}, os.getcwd(), \"-G\", \"Ninja\")\nCTest(\"--build-and-test\", os.getcwd(), \"-VV\")\nCPack(\"-G\", \"TGZ\")\n```\n\nis equivalent to the following shell commands:\n\n```shell\n$ cmake -DCMAKE_BUILD_TYPE=Release ${PWD} -G Ninja\n$ ctest --build-and-test ${PWD} -VV\n$ cpack -G TGZ\n```\n\n## Standard Configuration Variables\n\n- `pyctest.PROJECT_NAME`\n- `pyctest.SOURCE_DIRECTORY`\n- `pyctest.BINARY_DIRECTORY`\n- `pyctest.SITE`\n- `pyctest.BUILD_NAME`\n- `pyctest.TRIGGER`\n- `pyctest.CHECKOUT_COMMAND`\n- `pyctest.BUILD_COMMAND`\n- `pyctest.MODEL`\n- `pyctest.CUSTOM_COVERAGE_EXCLUDE`\n- `pyctest.CUSTOM_MAXIMUM_NUMBER_OF_ERRORS`\n- `pyctest.CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS`\n- `pyctest.CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE`\n\n### Setting Arbitrary Variables\n\n```python\n    pyctest.set(\"CTEST_TOKEN_FILE\", \"${CMAKE_CURRENT_LIST_DIR}/.ctest-token\")\n```\n\n### Generating a Test\n\n```python\n    test = pyctest.test()\n    test.SetName(\"nosetests\")\n    test.SetCommand([\"nosetests\", \"test\", \"--cover-xml\", \"--cover-xml-file=coverage.xml\"])\n    # set directory to run test\n    test.SetProperty(\"WORKING_DIRECTORY\", pyctest.BINARY_DIRECTORY)\n    test.SetProperty(\"RUN_SERIAL\", \"ON\")\n    test.SetProperty(\"ENVIRONMENT\", \"OMP_NUM_THREADS=1\")\n```\n\n### Examples\n\n- [Basic example](https://github.com/jrmadsen/pyctest/blob/master/examples/Basic/README.md)\n- [Advanced example](https://github.com/jrmadsen/pyctest/blob/master/examples/TomoPy/README.md)\n  - includes submission to CDash dashboard\n\n### CDash Integration Example\n\nResults from running the TomoPy example can be found at the [TomoPy CDash Testing Dashboard @ NERSC](https://cdash.nersc.gov/index.php?project=TomoPy)\n\n- Python code with C extensions without CMake build system\n- The build logs from \"python setup.py install\" are registered in the \"Build\" section\n- The `nosetests test` command + other are wrapped into CTests\n\n## Testing Example\n\nPyCTest can be used to simple execute tests and submit to a dashboard without any configuration, build, etc. steps\n\n```python\n#!/usr/bin/env python\n\nimport os\nimport sys\nimport shutil\nimport argparse\nimport platform\nimport traceback\n\nimport pyctest.pyctest as pyctest\nimport pyctest.pycmake as pycmake\nimport pyctest.helpers as helpers\n\nif __name__ == \"__main__\":\n\n    directory = os.path.join(os.getcwd(), \"pycm-test\")\n\n    # these are required\n    pyctest.PROJECT_NAME = \"PyCTest\"\n    pyctest.SOURCE_DIRECTORY = directory\n    pyctest.BINARY_DIRECTORY = directory\n\n    args = helpers.ArgumentParser(pyctest.PROJECT_NAME,\n                                  pyctest.SOURCE_DIRECTORY,\n                                  pyctest.BINARY_DIRECTORY).parse_args()\n\n    # set explicitly\n    pyctest.MODEL = \"Continuous\"\n    pyctest.SITE = platform.node()\n\n    # create a Test object\n    test = pyctest.test()\n    test.SetName(\"list_directory\")\n    test.SetCommand([\"ls\", directory])\n    test.SetProperty(\"WORKING_DIRECTORY\", os.getcwd())\n\n    # create a second test\n    # previous test is already stored by PyCTest\n    test = pyctest.test()\n    test.SetName(\"hostname\")\n    test.SetCommand([\"hostname\"])\n    test.SetProperty(\"TIMEOUT\", \"10\")\n\n    # generate the CTestConfig.cmake and CTestCustom.cmake\n    pyctest.generate_config(directory)\n\n    # generate the CTestTestfile.cmake file\n    pyctest.generate_test_file(directory)\n\n    # run CTest -- e.g. ctest -VV ${PWD}/pycm-test\n    pyctest.run(pyctest.ARGUMENTS, directory)\n```\n\n```bash\nCTest arguments (default): '-V -DSTAGES=Start;Update;Configure;Build;Test;Coverage;MemCheck -S Stages.cmake -j1'\nWriting CTest test file: \"/Users/jrmadsen/devel/c++/pyctest-master/pycm-test/CTestTestfile.cmake\"...\nGenerating test \"list_directory\"...\nGenerating test \"hostname\"...\n-- STAGES = Start;Update;Configure;Build;Test;Coverage;MemCheck\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Running CTEST_START stage...\nRun dashboard with model Continuous\n   Source directory: /Users/jrmadsen/devel/c++/pyctest-master/pycm-test\n   Build directory: /Users/jrmadsen/devel/c++/pyctest-master/pycm-test\n   Track: Continuous\n   Reading ctest configuration file: /Users/jrmadsen/devel/c++/pyctest-master/pycm-test/CTestConfig.cmake\n   Site: JRM-macOS-DOE.local\n   Build name: [Darwin macOS 10.13.6 x86_64] [Python 3.6.7]\n   Use Continuous tag: 20181129-2118\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Skipping CTEST_UPDATE stage...\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Skipping CTEST_CONFIGURE stage...\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Skipping CTEST_BUILD stage...\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Running CTEST_TEST stage...\nTest project /Users/jrmadsen/devel/c++/pyctest-master/pycm-test\n    Start 1: list_directory\n1/2 Test #1: list_directory ...................   Passed    0.00 sec\n    Start 2: hostname\n2/2 Test #2: hostname .........................   Passed    0.00 sec\n\n100% tests passed, 0 tests failed out of 2\n\nTotal Test time (real) =   0.01 sec\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Skipping CTEST_COVERAGE stage...\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Skipping CTEST_MEMCHECK stage...\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Skipping CTEST_SUBMIT stage...\n-- [[Darwin macOS 10.13.6 x86_64] [Python 3.6.7]] Finished Continuous Stages (Start;Update;Configure;Build;Test;Coverage;MemCheck)\n```\n\n## Command Line Interface\n\n```shell\nPyCTest args: ['--help']\n  CTest args: []\n  CMake args: []\nusage: pyctest-runner.py [-h] [-F] [-S] [-A] [-j \u003cINT\u003e] [-m \u003cTYPE\u003e] [-b \u003cNAME\u003e] [-i \u003cPATH\u003e] [-o \u003cPATH\u003e] [-M \u003cTYPE\u003e] [-H \u003cSITE\u003e] [-P \u003cEXE\u003e] [-N \u003cNAME\u003e]\n                         [-C \u003cPATH\u003e [\u003cPATH\u003e ...]] [-L \u003cLABEL\u003e [\u003cLABEL\u003e ...]] [-T [\u003cTYPE\u003e [\u003cTYPE\u003e ...]]] [-fc \u003cEXE\u003e] [-cc \u003cEXE\u003e] [-cxx \u003cEXE\u003e]\n                         [--pyctest-token \u003cTOKEN\u003e] [--pyctest-token-file \u003cFILE\u003e] [--pyctest-vcs-type \u003cTYPE\u003e] [--pyctest-build-type \u003cTYPE\u003e]\n                         [--pyctest-trigger \u003cTYPE\u003e] [--pyctest-use-launchers \u003cBOOL\u003e] [--pyctest-ctest-args [\u003cARG\u003e [\u003cARG\u003e ...]]] [--pyctest-cdash-version \u003cSTR\u003e]\n                         [--pyctest-submit-retry-count \u003cINT\u003e] [--pyctest-submit-retry-delay \u003cINT\u003e] [--pyctest-curl-options \u003cLIST\u003e]\n                         [--pyctest-drop-location \u003cSTR\u003e] [--pyctest-drop-method \u003cSTR\u003e] [--pyctest-drop-site \u003cSTR\u003e] [--pyctest-drop-site-password \u003cSTR\u003e]\n                         [--pyctest-drop-site-user \u003cSTR\u003e] [--pyctest-nightly-start-time \u003cSTR\u003e] [--pyctest-update-version-only]\n\nPyCTest argparse. Arguments after first '--' are passed directly to CTest, arguments after second '--' are passed directly to CMake\n\noptional arguments:\n  -h, --help                                                                   show this help message and exit\n  -F, --pyctest-clean-first                                                    Remove standard PyCTest files and binary directory (if not source directory)\n  -S, --pyctest-submit                                                         Enable submission to dashboard\n  -A, --pyctest-append                                                         Append to last invocation of CTest\n  -j \u003cINT\u003e, --pyctest-jobs \u003cINT\u003e                                               number of concurrent jobs\n  -m \u003cTYPE\u003e, --pyctest-mode \u003cTYPE\u003e                                             Run specific stage. Choices:\n                                                                               [Start,Update,Configure,Build,Test,Coverage,MemCheck,Submit,Stages]\n  -b \u003cNAME\u003e, --pyctest-build-name \u003cNAME\u003e                                       Build name for identification\n  -i \u003cPATH\u003e, --pyctest-source-dir \u003cPATH\u003e                                       Source directory\n  -o \u003cPATH\u003e, --pyctest-binary-dir \u003cPATH\u003e                                       Binary/build/working directory\n  -M \u003cTYPE\u003e, --pyctest-model \u003cTYPE\u003e                                            CTest submission model (track). Choices: [Nightly,Continuous,Experimental]\n  -H \u003cSITE\u003e, --pyctest-site \u003cSITE\u003e                                             CTest submission site\n  -P \u003cEXE\u003e, --pyctest-python-exe \u003cEXE\u003e                                         Python executable to use. This can be absolue, relative, or CMake path\n  -N \u003cNAME\u003e, --pyctest-project-name \u003cNAME\u003e                                     Name of project using PyCTest\n  -C \u003cPATH\u003e [\u003cPATH\u003e ...], --pyctest-cleanup \u003cPATH\u003e [\u003cPATH\u003e ...]                Remove standard PyCTest files and binary directory (if not source directory) and\n                                                                               exit\n  -L \u003cLABEL\u003e [\u003cLABEL\u003e ...], --pyctest-subproject-labels \u003cLABEL\u003e [\u003cLABEL\u003e ...]  Add labels for subproject\n  -T [\u003cTYPE\u003e [\u003cTYPE\u003e ...]], --pyctest-stages [\u003cTYPE\u003e [\u003cTYPE\u003e ...]]             Run multiple stages. Choices:\n                                                                               [Start,Update,Configure,Build,Test,Coverage,MemCheck,Submit]\n  -fc \u003cEXE\u003e, --pyctest-fortran-compiler \u003cEXE\u003e                                  Specify Fortan compiler (if needed)\n  -cc \u003cEXE\u003e, --pyctest-c-compiler \u003cEXE\u003e                                        Specify the C compiler (if needed)\n  -cxx \u003cEXE\u003e, --pyctest-cxx-compiler \u003cEXE\u003e                                     Specify C++ compiler (if needed)\n  --pyctest-token \u003cTOKEN\u003e                                                      CTest site token for submission\n  --pyctest-token-file \u003cFILE\u003e                                                  Path to file for CTest site token for submission\n  --pyctest-vcs-type \u003cTYPE\u003e                                                    Set to enable revision ID discovery during the Update stage. Choices:\n                                                                               [bzr,cvs,git,hg,p4,svn]\n  --pyctest-build-type \u003cTYPE\u003e                                                  Specify CMAKE_BUILD_TYPE (if using CMake). Choices:\n                                                                               [Release,RelWithDebInfo,Debug,MinSizeRel]\n  --pyctest-trigger \u003cTYPE\u003e                                                     DEPRECATED\n  --pyctest-use-launchers \u003cBOOL\u003e                                               Enable launchers\n  --pyctest-ctest-args [\u003cARG\u003e [\u003cARG\u003e ...]]                                     CTest arguments\n  --pyctest-cdash-version \u003cSTR\u003e                                                Set CTest variable: 'CTEST_CDASH_VERSION'\n  --pyctest-submit-retry-count \u003cINT\u003e                                           Set CTest variable: 'CTEST_SUBMIT_RETRY_COUNT'\n  --pyctest-submit-retry-delay \u003cINT\u003e                                           Set CTest variable: 'CTEST_SUBMIT_RETRY_DELAY'\n  --pyctest-curl-options \u003cLIST\u003e                                                Set CTest variable: 'CTEST_CURL_OPTIONS'\n  --pyctest-drop-location \u003cSTR\u003e                                                Set CTest variable: 'CTEST_DROP_LOCATION'\n  --pyctest-drop-method \u003cSTR\u003e                                                  Set CTest variable: 'CTEST_DROP_METHOD'\n  --pyctest-drop-site \u003cSTR\u003e                                                    Set CTest variable: 'CTEST_DROP_SITE'\n  --pyctest-drop-site-password \u003cSTR\u003e                                           Set CTest variable: 'CTEST_DROP_SITE_PASSWORD'\n  --pyctest-drop-site-user \u003cSTR\u003e                                               Set CTest variable: 'CTEST_DROP_SITE_USER'\n  --pyctest-nightly-start-time \u003cSTR\u003e                                           Set CTest variable: 'CTEST_NIGHTLY_START_TIME'\n  --pyctest-update-version-only                                                Specify that you want the version control update command to only discover the\n                                                                               current version that is checked out, and not to update to a different version\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjrmadsen%2Fpyctest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjrmadsen%2Fpyctest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjrmadsen%2Fpyctest/lists"}