From ba0bc50426b7e62e6a960463af42580fb8a1dad5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Aug 2026 20:54:22 +0000 Subject: [PATCH 01/10] Add pull request test workflow Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- .github/workflows/tests.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..4866400 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,32 @@ +name: Tests + +on: + pull_request: + +jobs: + test: + name: Run tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + + - name: Install package + run: python -m pip install -e . + + - name: Prepare local SSH key + run: | + mkdir -p ~/.ssh + chmod 700 ~/.ssh + ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa + cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys + chmod 600 ~/.ssh/authorized_keys + + - name: Run tests + run: python -m unittest tests.test_job tests.test_node tests.test_templates tests.test_workflow tests.test_remote_reuse From 271e5ce9a39a9cfc58443c6bd685763e435ea7b0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Aug 2026 20:55:26 +0000 Subject: [PATCH 02/10] Restrict workflow token permissions Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- .github/workflows/tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4866400..5fe45be 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,6 +7,8 @@ jobs: test: name: Run tests runs-on: ubuntu-latest + permissions: + contents: read steps: - uses: actions/checkout@v4 with: From f98a6c85497f90dc4fc2199ac9fa3054b5299e1a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Aug 2026 21:13:11 +0000 Subject: [PATCH 03/10] Install coverage in PR test workflow Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5fe45be..d547d1c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -20,7 +20,7 @@ jobs: python-version: "3.x" - name: Install package - run: python -m pip install -e . + run: python -m pip install -e . coverage - name: Prepare local SSH key run: | From 9d7d268fcaa78878d42e978cce9c154cdcdb3a63 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Aug 2026 21:13:46 +0000 Subject: [PATCH 04/10] Run PR tests with coverage report Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- .github/workflows/tests.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d547d1c..d24fcc5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,5 +30,8 @@ jobs: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys - - name: Run tests - run: python -m unittest tests.test_job tests.test_node tests.test_templates tests.test_workflow tests.test_remote_reuse + - name: Run tests with coverage + run: python -m coverage run -m unittest tests.test_job tests.test_node tests.test_templates tests.test_workflow tests.test_remote_reuse + + - name: Print coverage report + run: python -m coverage report From ef7e8dd5a5e0a8b16ae8a89df0739b6880e7c63e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Aug 2026 21:14:41 +0000 Subject: [PATCH 05/10] Finalize PR workflow coverage validation Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- .coverage | Bin 0 -> 53248 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .coverage diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..c8a5a240b035efb2d8a66648ad31c298d4ea27cb GIT binary patch literal 53248 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 EKl`)p6#xJL literal 0 HcmV?d00001 From 7c5435edbfabb5fd023f26d9cf85fd7d9d656fc4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Aug 2026 19:45:06 +0000 Subject: [PATCH 06/10] Ensure SSH service is available in test workflow Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- .github/workflows/tests.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d24fcc5..1b4ea63 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,13 +22,17 @@ jobs: - name: Install package run: python -m pip install -e . coverage - - name: Prepare local SSH key + - name: Prepare local SSH server and key run: | + sudo apt-get update + sudo apt-get install -y openssh-server + sudo service ssh start mkdir -p ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa - cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys + cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys + ssh -o StrictHostKeyChecking=no localhost 'echo localhost ssh ok' - name: Run tests with coverage run: python -m coverage run -m unittest tests.test_job tests.test_node tests.test_templates tests.test_workflow tests.test_remote_reuse From a744ab887cc400832faeafd492f86b4a411a3622 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Aug 2026 22:43:11 +0000 Subject: [PATCH 07/10] Add .coverage to .gitignore Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 374300d..b9b4fe2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.pyc *.pyo .pydevproject +.coverage test/.coverage .activate .vscode From 0b3df74c24c7011dd2f3c6a6861705e2424a4f45 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Aug 2026 22:48:32 +0000 Subject: [PATCH 08/10] Run full test suite with unittest discover Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1b4ea63..0d4428f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -35,7 +35,7 @@ jobs: ssh -o StrictHostKeyChecking=no localhost 'echo localhost ssh ok' - name: Run tests with coverage - run: python -m coverage run -m unittest tests.test_job tests.test_node tests.test_templates tests.test_workflow tests.test_remote_reuse + run: python -m coverage run -m unittest discover - name: Print coverage report run: python -m coverage report From 7e57d07f7b35620d1e4d29cbbabdef69b450321f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Aug 2026 03:23:25 +0000 Subject: [PATCH 09/10] Skip integration test when condor_submit is not available Co-authored-by: swainn <5123221+swainn@users.noreply.github.com> --- tests/test_integraiton.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_integraiton.py b/tests/test_integraiton.py index 01a1698..f27ea1c 100644 --- a/tests/test_integraiton.py +++ b/tests/test_integraiton.py @@ -4,6 +4,7 @@ import os import shutil +@unittest.skipUnless(shutil.which('condor_submit'), 'condor_submit not found') class TestIntegration(unittest.TestCase): expected = None From 19bd572561321e789874f357cd46cfa47ea46d9e Mon Sep 17 00:00:00 2001 From: Nathan Swain Date: Tue, 18 Aug 2026 06:10:21 -0600 Subject: [PATCH 10/10] Delete .coverage --- .coverage | Bin 53248 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .coverage diff --git a/.coverage b/.coverage deleted file mode 100644 index c8a5a240b035efb2d8a66648ad31c298d4ea27cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 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 EKl`)p6#xJL