Description
The technique this tool uses for checking out tags only preserves the relation between tag and ref, not any annotations created with git tag -a
.
git fetch origin +$HASH:refs/tags/$TAG
git checkout -f refs/tag/$TAG
I have a CI action that depends on information from annotated tags. Specifically, the name of the person who applied the tag: git tag --list --points-at HEAD --format '%(taggeremail)'
(I can't use ${{ github.actor }}
for reasons).
The workaround is to run git fetch -f origin ${{ github.ref }}:${{ github.ref }}
. But it would be better not to need this workaround.
Metadata
Metadata
Assignees
Labels
No labels
Activity
morrone commentedon Jul 17, 2020
Agreed! This breaks the "git describe" command too. We need tags to be in their correct original form.
martinthomson commentedon Jul 20, 2020
I realize now that this is complicated by a desire to checkout the specific code identified by the hash when the tag has been re-applied on the repository. I would be happy to have an option that would cause the checkout to fail if the hash didn't match.
For example:
ericsciple commentedon Jul 20, 2020
@martinthomson does the input
depth: 0
help? It will cause all history for all branches and tags to be fetched?morrone commentedon Jul 20, 2020
I didn't try 0, but I tried "fetch-depth: 2000" at one point. It fetched the other tags in that history correctly, but if the thing that triggered the workflow was itself an annotated tag, that one tag will still be converted from an annotated tag into a lightweight tag.
ericsciple commentedon Jul 31, 2020
fetch-depth: 0
triggers a different behavior. Curious if that solves the issue?Stanzilla commentedon Aug 13, 2020
It does not solve the issue, I ran into this today. Looks like the action is not using the tag itself, just the commit the tag points to.
andreineculau commentedon Aug 24, 2020
fetch-depth: 0
does solve the issue. I don't see how it wouldn't because it fetch all branches, all tagsStanzilla commentedon Aug 24, 2020
@andreineculau sadly does not.
Fix issue where release would fail validation.
Envek commentedon Aug 25, 2020
+1 on preserving tag annotations.
fetch-depth: 0
alone doesn't help,git fetch --tags --force
does help.martinthomson commentedon Aug 27, 2020
That's the same workaround I originally suggested, just more broadly targets (all tags, not just one). As you say
--depth 0
has no effect.The main problem is that the code fetches using a hash and then re-applies its own tag if the build was initiated as a result of applying a tag. That's also why you need to add
--force
, because you need to overwrite that bad tag. Hence my suggestion to fetch the tag rather than applying it, along with a check that the tag still points to the fetched content.bixu commentedon Aug 28, 2020
Also seeing that
fetch_depth: 0
doesn't work for all Actions that handle/search for tags in the repo history.haizaar commentedon Oct 6, 2020
I only needed to
git describe --always
to discover the latest tag since I'm release docker images myself, and indeed in GH Actions it was discovering one-before-the-current tags. In my case it was another to add--tags
togit describe
to make it consider non-annotated tags well.While it was an easy workaround I believe there is way too much details involved in getting this work properly.
215 remaining items