guitarrapc / git-shallow-clone-orb

circleci orb to execute git shallow clone for faster checkout.
https://circleci.com/orbs/registry/orb/guitarrapc/git-shallow-clone
MIT License
21 stars 11 forks source link

Error when using `path` option in parent of working_directory #33

Open pkyeck opened 2 years ago

pkyeck commented 2 years ago

First I tried to replace the "normal" checkout step with the following

working_directory: ~/project/api

steps:
  - unless:
          condition:
            or:
              - equal: [ true, << pipeline.parameters.ci-changed >> ]
              - equal: [ true, << pipeline.parameters.api-changed >> ]
              - equal: [ true, << pipeline.parameters.common-changed >> ]
          steps:
            - run: 
                name: skip job b/c no changes occured
                command: circleci-agent step halt
  - checkout:
      path: ~/project
  - restore_cache:
      keys:
        - v1-dependencies-api-{{ checksum "yarn.lock" }}
        - v1-dependencies-api-
working_directory: ~/project/api

steps:
  - unless:
          condition:
            or:
              - equal: [ true, << pipeline.parameters.ci-changed >> ]
              - equal: [ true, << pipeline.parameters.api-changed >> ]
              - equal: [ true, << pipeline.parameters.common-changed >> ]
          steps:
            - run: 
                name: skip job b/c no changes occured
                command: circleci-agent step halt
  - git-shallow-clone/checkout:
      path: ~/project
  - restore_cache:
      keys:
        - v1-dependencies-api-{{ checksum "yarn.lock" }}
        - v1-dependencies-api-

But it seems the orb cannot handle the ~/project path correctly and checks out the repo into the wrong folder. My next step (restore_cache) failed with:

error computing cache key: template: cacheKey:1:23: executing "cacheKey" at <checksum "yarn.lock">: error calling checksum: open /home/circleci/project/api/yarn.lock: no such file or directory

So I changed the path to an absolute path like this:

working_directory: ~/project/api

steps:
  - unless:
          condition:
            or:
              - equal: [ true, << pipeline.parameters.ci-changed >> ]
              - equal: [ true, << pipeline.parameters.api-changed >> ]
              - equal: [ true, << pipeline.parameters.common-changed >> ]
          steps:
            - run: 
                name: skip job b/c no changes occured
                command: circleci-agent step halt
  - git-shallow-clone/checkout:
      path: /home/circleci/project

Now I get the error message: fatal: destination path '/home/circleci/project' already exists and is not an empty directory.

Logging into the machine via ssh and checking the folder show that the ~/project/api was already created (by CircleCI!?). How does the "normal" checkout command handle this case?

Can we somehow improve the git-shallow-clone/checkout command to handle:

1) path with ~/... in it 2) the "path already exists" error

Maybe you have a quick idea or I can try and take a look at how to tackle this.

steinbrueckri commented 1 year ago

Any news about that?

guitarrapc commented 1 year ago

Is this issue related to https://github.com/guitarrapc/git-shallow-clone-orb/issues/51 with Source caching feature? If so can you try v2.7.0 which include Source cahcing support.