tag checkout action overwrites tag with pointed-to commit
jwise opened this issue · comments
I have an action that does some stuff that reads the output of git tag -l --format=%(contents)
to generate a version file.
On my laptop, I get the tag message if I do something like:
git commit -a -m 'Commit message!'
git tag -a -m 'Tag message!' mytags/v1.0
git tag -l mytags/v1.0 '--format=%(contents)'
But if I do that very same git tag
command in CI in a push action that is
on:
push:
branches: [ "master" ]
tags: [ "mytags/*" ]
then the git tag
command returns the commit message, instead!
After an hour of hunting, I tracked it down to this logic:
checkout/src/git-source-provider.ts
Lines 177 to 182 in b32f140
Roughly, what's happening here is that CI first does:
/usr/bin/git -c protocol.version=2 fetch --prune --no-recurse-submodules origin +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/*
And then it immediately after does this:
/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules origin +[the pointed to tag commit]:refs/tags/mytags/v1.0
as a result of the above logic. But this is wrong: it should not fetch the pointed to tag commit! It should fetch the tag object itself!