-
Notifications
You must be signed in to change notification settings - Fork 5
Description
I noticed a plausible intermittent error in a copilot session. A gitlib is cloned twice in the same dependency tree, and an error is thrown. I have not reproduced it and copilot has successfully run this project many times before, but in this particular session (appended at the bottom) the error occurred.
I have the following deps-clr.edn:
{:paths ["src" "test-resources"]
:deps {org.typedclojure/typed.clj.runtime {:local/root "../clj.runtime"
:deps/manifest :deps}
org.typedclojure/typed.clj.analyzer {:local/root "../clj.analyzer"
:deps/manifest :deps}
org.clojure/math.combinatorics {:git/url "https://github.com/frenchy64/math.combinatorics"
:git/sha "e4a4f82e74ce750e8a45dee2f8e306b53971fe4f"}
org.clojure/core.cache {:git/url "https://github.com/clojure/clr.core.cache.git"
:git/sha "ee7fa0f618ebd1ea00130a1b648778bdefcf059b"}
org.clojure/tools.namespace {:git/url "https://github.com/clojure/clr.tools.namespace.git"
:git/sha "46d81cba650eaf7bc9d9aa79700d0d7e496e987f"}
org.clojure/tools.reader {:git/url "https://github.com/clojure/clr.tools.reader.git"
:git/sha "46ce896e51f1707b45afd128fe634f0735ad477b"}}
:aliases
{:test
{:extra-paths ["test"]
:extra-deps {io.github.dmiller/test-runner {:git/tag "v0.5.3clr" :git/sha "ae91dd2727bbf70eb3a6d869a19953de3819dfbc"}}
:main-opts ["-m" "cognitect.test-runner"]}}}
;; ../clj.runtime/deps-clr.edn
{:paths ["src" "resources"]
:aliases
{:test
{:extra-paths ["test"]
:extra-deps {io.github.dmiller/test-runner {:git/tag "v0.5.3clr" :git/sha "ae91dd2727bbf70eb3a6d869a19953de3819dfbc"}}
:main-opts ["-m" "cognitect.test-runner"]}}}
;; ../clj.analyzer/deps-clr.edn
{:paths ["src"]
:deps {org.typedclojure/typed.cljc.analyzer {:local/root "../cljc.analyzer"
:deps/manifest :deps}}
:aliases
{:test
{:extra-paths ["test"]
:extra-deps {io.github.dmiller/test-runner {:git/tag "v0.5.3clr" :git/sha "ae91dd2727bbf70eb3a6d869a19953de3819dfbc"}}
:main-opts ["-m" "cognitect.test-runner"]}}}
;; ../cljc.analyzer/deps-clr.edn
{:paths ["src"]
:aliases
{:test
{:extra-paths ["test"]
:extra-deps {io.github.dmiller/test-runner {:git/tag "v0.5.3clr" :git/sha "ae91dd2727bbf70eb3a6d869a19953de3819dfbc"}}
:main-opts ["-m" "cognitect.test-runner"]}}}
Copilot attempted to debug the problem, this was the most interesting log where the clone is deleted before running cljr:
$ rm -rf /home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader && cd /home/runner/work/typedclojure/typedclojure/typed/clj.checker && bash ./script/test-clr 2>&1 | tail -150
Running typed.clj.checker tests under ClojureCLR...
Cloning: https://github.com/clojure/clr.tools.reader.git
Cloning: https://github.com/clojure/clr.tools.reader.git
Error building classpath. Unable to clone /home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader
fatal: destination path '/home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader' already exists and is not an empty directory.
<exited with exit code 0>
./script/test-clr simply calls cljr -M:test.
Here's the versions that were installed:
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '8.0.x'
- name: Install ClojureCLR and cljr
run: |
# Install ClojureCLR as a dotnet tool
dotnet tool install --global Clojure.Main --version 1.12.3-alpha3
# Install cljr CLI tool
dotnet tool install --global Clojure.Cljr --version 0.1.0-alpha8
echo "$HOME/.dotnet/tools" >> $GITHUB_PATH
Full Copilot session
From a copilot session, noticed the duplicated Cloning: https://github.com/clojure/clr.tools.reader.git forms:
Copilot: Now let me run the CLR tests to find and fix remaining errors:
$ cd /home/runner/work/typedclojure/typedclojure/typed/clj.checker && bash ./script/test-clr 2>&1 | tail -100
Running typed.clj.checker tests under ClojureCLR...
Cloning: https://github.com/dmiller/test-runner.git
Cloning: https://github.com/frenchy64/math.combinatorics
Checking out: https://github.com/frenchy64/math.combinatorics at e4a4f82e74ce750e8a45dee2f8e306b53971fe4f
Cloning: https://github.com/clojure/clr.core.cache.git
Checking out: https://github.com/clojure/clr.core.cache.git at ee7fa0f618ebd1ea00130a1b648778bdefcf059b
Cloning: https://github.com/clojure/clr.tools.namespace.git
Cloning: https://github.com/clojure/clr.data.priority-map.git
Checking out: https://github.com/clojure/clr.tools.namespace.git at 46d81cba650eaf7bc9d9aa79700d0d7e496e987f
Cloning: https://github.com/clojure/clr.tools.reader.git
Cloning: https://github.com/clojure/clr.tools.reader.git
Checking out: https://github.com/clojure/clr.tools.reader.git at 46ce896e51f1707b45afd128fe634f0735ad477b
Checking out: https://github.com/dmiller/test-runner.git at ae91dd2727bbf70eb3a6d869a19953de3819dfbc
Checking out: https://github.com/clojure/clr.data.priority-map.git at 1c2275130eb92941e4c26de1110f23ca0d16b706
Error building classpath. Unable to clone /home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader
fatal: destination path '/home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader' already exists and is not an empty directory.
<exited with exit code 0>
Copilot: There's a git cache issue. Let me clean it and try again:
$ rm -rf /home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader && cd /home/runner/work/typedclojure/typedclojure/typed/clj.checker && bash ./script/test-clr 2>&1 | tail -150
Running typed.clj.checker tests under ClojureCLR...
Cloning: https://github.com/clojure/clr.tools.reader.git
Cloning: https://github.com/clojure/clr.tools.reader.git
Error building classpath. Unable to clone /home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader
fatal: destination path '/home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader' already exists and is not an empty directory.
<exited with exit code 0>
Copilot: Clear .gitlibs completely and try again.
$ rm -rf /home/runner/.gitlibs && cd /home/runner/work/typedclojure/typedclojure/typed/clj.checker && timeout 280 bash ./script/test-clr 2>&1 | tail -200
Running typed.clj.checker tests under ClojureCLR...
Cloning: https://github.com/dmiller/test-runner.git
Cloning: https://github.com/frenchy64/math.combinatorics
Checking out: https://github.com/frenchy64/math.combinatorics at e4a4f82e74ce750e8a45dee2f8e306b53971fe4f
Cloning: https://github.com/clojure/clr.core.cache.git
Checking out: https://github.com/clojure/clr.core.cache.git at ee7fa0f618ebd1ea00130a1b648778bdefcf059b
Cloning: https://github.com/clojure/clr.tools.namespace.git
Cloning: https://github.com/clojure/clr.data.priority-map.git
Checking out: https://github.com/clojure/clr.tools.namespace.git at 46d81cba650eaf7bc9d9aa79700d0d7e496e987f
Cloning: https://github.com/clojure/clr.tools.reader.git
Cloning: https://github.com/clojure/clr.tools.reader.git
Checking out: https://github.com/clojure/clr.tools.reader.git at 46ce896e51f1707b45afd128fe634f0735ad477b
Checking out: https://github.com/dmiller/test-runner.git at ae91dd2727bbf70eb3a6d869a19953de3819dfbc
Checking out: https://github.com/clojure/clr.data.priority-map.git at 1c2275130eb92941e4c26de1110f23ca0d16b706
Error building classpath. Unable to clone /home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader
fatal: destination path '/home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader' already exists and is not an empty directory.
<exited with exit code 0>
Copilot: The git cache issue persists. Let me try a different approach - check if there's a lock file or corrupted repo:
$ ls -la /home/runner/.gitlibs/_repos/https/github.com/clojure/ 2>/dev/null | head -20
total 24
drwxrwxr-x 6 runner runner 4096 Oct 24 13:42 .
drwxrwxr-x 5 runner runner 4096 Oct 24 13:42 ..
drwxrwxr-x 7 runner runner 4096 Oct 24 13:42 clr.core.cache
drwxrwxr-x 7 runner runner 4096 Oct 24 13:42 clr.data.priority-map
drwxrwxr-x 7 runner runner 4096 Oct 24 13:42 clr.tools.namespace
drwxrwxr-x 7 runner runner 4096 Oct 24 13:42 clr.tools.reader
<exited with exit code 0>
Copilot: The directory exists. Let me check if there's a duplicate git clone attempt happening:
The directory exists. Let me check if there's a duplicate git clone attempt happening:
$ cd /home/runner/work/typedclojure/typedclojure/typed/clj.checker && cat deps-clr.edn | head -30
{:paths ["src" "test-resources"]
:deps {org.typedclojure/typed.clj.runtime {:local/root "../clj.runtime"
:deps/manifest :deps}
org.typedclojure/typed.clj.analyzer {:local/root "../clj.analyzer"
:deps/manifest :deps}
org.clojure/math.combinatorics {:git/url "https://github.com/frenchy64/math.combinatorics"
:git/sha "e4a4f82e74ce750e8a45dee2f8e306b53971fe4f"}
org.clojure/core.cache {:git/url "https://github.com/clojure/clr.core.cache.git"
:git/sha "ee7fa0f618ebd1ea00130a1b648778bdefcf059b"}
org.clojure/tools.namespace {:git/url "https://github.com/clojure/clr.tools.namespace.git"
:git/sha "46d81cba650eaf7bc9d9aa79700d0d7e496e987f"}
org.clojure/tools.reader {:git/url "https://github.com/clojure/clr.tools.reader.git"
:git/sha "46ce896e51f1707b45afd128fe634f0735ad477b"}}
:aliases
{:test
{:extra-paths ["test"]
:extra-deps {io.github.dmiller/test-runner {:git/tag "v0.5.3clr" :git/sha "ae91dd2727bbf70eb3a6d869a19953de3819dfbc"}}
:main-opts ["-m" "cognitect.test-runner"]}}}
<exited with exit code 0>
Copilot: I see - there's a single entry for tools.reader, but the error shows it's being cloned twice. This might be a timing issue. Let me try running it with a longer wait and see the actual test output:
$ cd /home/runner/.gitlibs/_repos/https/github.com/clojure && ls -d clr.tools.reader* 2>/dev/null && rm -rf clr.tools.reader* && cd /home/runner/work/typedclojure/typedclojure/typed/clj.checker && bash ./script/test-clr 2>&1
clr.tools.reader
Running typed.clj.checker tests under ClojureCLR...
Cloning: https://github.com/clojure/clr.tools.reader.git
Cloning: https://github.com/clojure/clr.tools.reader.git
Error building classpath. Unable to clone /home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader
fatal: destination path '/home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader' already exists and is not an empty directory.
<exited with exit code 1>
Copilot: The issue might be a ClojureCLR tools.deps bug. Let me try pre-cloning the repo manually and then running the test:
$ cd /home/runner && rm -rf .gitlibs && mkdir -p .gitlibs/_repos/https/github.com/clojure && cd .gitlibs/_repos/https/github.com/clojure && git clone https://github.com/clojure/clr.tools.reader.git 2>&1 | tail -5 && cd /home/runner/work/typedclojure/typedclojure/typed/clj.checker && timeout 280 bash ./script/test-clr 2>&1 | tail -100
Cloning into 'clr.tools.reader'...
Running typed.clj.checker tests under ClojureCLR...
Cloning: https://github.com/dmiller/test-runner.git
Cloning: https://github.com/frenchy64/math.combinatorics
Checking out: https://github.com/frenchy64/math.combinatorics at e4a4f82e74ce750e8a45dee2f8e306b53971fe4f
Cloning: https://github.com/clojure/clr.core.cache.git
Checking out: https://github.com/clojure/clr.core.cache.git at ee7fa0f618ebd1ea00130a1b648778bdefcf059b
Cloning: https://github.com/clojure/clr.tools.namespace.git
Cloning: https://github.com/clojure/clr.data.priority-map.git
Checking out: https://github.com/clojure/clr.tools.namespace.git at 46d81cba650eaf7bc9d9aa79700d0d7e496e987f
Cloning: https://github.com/clojure/clr.tools.reader.git
Cloning: https://github.com/clojure/clr.tools.reader.git
Error building classpath. Unable to clone /home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader
fatal: destination path '/home/runner/.gitlibs/_repos/https/github.com/clojure/clr.tools.reader' already exists and is not an empty directory.
<exited with exit code 0>
This is definitely a ClojureCLR bug - it's trying to clone the same repo twice. Let me work around it by using a lock file approach or check the test runner script:
#!/bin/bash
# Run tests for typed.clj.checker under ClojureCLR
#
# Prerequisites:
# - cljr (ClojureCLR CLI tool) must be installed as a dotnet tool
# - .NET 8.0 or later must be installed
set -e
# Get the directory where this script is located
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$( cd "$SCRIPT_DIR/.." && pwd )"
echo "Running typed.clj.checker tests under ClojureCLR..."
# Run tests using cljr with deps-clr.edn and cognitect test-runner
cd "$PROJECT_ROOT"
cljr -M:test "$@"