Solvedcheckout bad revision 'master' when using Lerna

I am trying to use the lerna run build --since master command in an action to only build packages that have changed in the branch. Lerna is running this git command to do that: git diff --name-only master -- packages/<package name>. That results in this error: lerna ERR! fatal: bad revision 'master'.

I've tried many different options and commands from the README in this project but nothing seems to work. I've set the fetch depth to 0 to fetch all history and I've tried manually specifying a git command like so:

- uses: actions/checkout@v2
- run: |
    git fetch --prune --unshallow origin master

Nothing seems to make master available for Lerna to compare against. Any help would be appreciated.

16 Answers

✔️Accepted Answer

So for everyone who lands here via google. My workflow looks like:

# example lerna task
lerna run test --since origin/master
- uses: actions/checkout@v2
- run: |
    git fetch --no-tags --prune --depth=1 origin +refs/heads/master:refs/remotes/origin/master

I only need the origin/master. If you need all branches use this run command (via docs)

git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/*

Other Answers:

I think mentioning that in the docs is helpful but it doesn't really solve the problem. You could add an option to the checkout action to always fetch master in addition to the current ref or make it so ref takes an array of things to check out.

It would also be nice to add an example in the documentation that shows how to use Lerna with GitHub Actions. It's a very commonly used tool with monorepos. I'd be happy to help with any of this work.

I did manage to get this working by doing a few things (which might not all be necessary):

  1. I added fetch-depth: 0 to the checkout action
  2. I added git fetch --prune to the checkout action
  3. I changed my lerna command to lerna run build --since origin/master

That seems to do the trick so this issue can probably be closed, however it would be nice if this were in the docs. I'd be happy to submit a PR if this is something others think should be included.

This worked too:

      - name: Checkout Repository
        uses: actions/checkout@v2
        with:
          fetch-depth: 0 
      ...
      ...
      ...

      - name: Lint
        run: npx lerna run lint --since origin/master

This looked cleaner but #118 (comment) looks more resource efficient.

If this is running on a branch/PR you can't really set ref: master because you want to checkout the branch not master. So there is no local reference to master even if you run git fetch.