action-gh-release icon indicating copy to clipboard operation
action-gh-release copied to clipboard

GitHub Releases requires a tag

Open preetjdp opened this issue 4 years ago • 24 comments

I keep getting this error that my git tag has not been set, tried multiple ways to do that from the command line and from bash inside of the action. Could not get promising results hence this issue.

Here is my main.yaml

name: Fast Builds

on: [push]

jobs:
build:

  runs-on: ubuntu-latest
  
  steps:
  - uses: actions/checkout@v1
  - uses: actions/setup-java@v1
    with:
      java-version: '12.x'
  - uses: subosito/flutter-action@v1
    with:
      channel: 'stable'      
  - run: flutter doctor
  - run: flutter pub get
  - run: flutter build apk
  - name: Display the path
    run: |
      echo ${PATH}
      git tag 0.0.1
      echo "wow"
    shell: bash
#     -name: Debug Info
#      shell: bash
#      run: |
#         GITHUB_TAG = "0.0.1"
#         git tag ${GITHUB_TAG}
#         echo "Release Tag :   ${GITHUB_TAG}"
  - name: Release To Git
    uses: softprops/action-gh-release@v1
#       if: startsWith(github.ref, 'refs/tags/')
    with: 
      body: "A new release"
      files: build/app/outputs/apk/release/app-release.apk
    env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

preetjdp avatar Sep 19 '19 20:09 preetjdp

A few things to note

  1. this action required a tag because GitHub releases do. That is not a bug.

  2. The push event that triggers the workflow run needs to be the push associated with a git push origin {tag}. The reason being that GitHub releases can only be created if GitHub servers know about the associated tag.

It looks like the push that is triggering these runs is a push of a commit.

  1. the tag operation within the workflow only exists in the workflow run checkout, not on your GitHub origin remote. If you push this within your workflow run it should trigger another run where the push is for your tag

  2. environment variables export within a step are not by default exposed to future steps. This is because every step runs in its own process.

You can use a custom command to pass env variables between workflow steps


I will try and follow up on this with documentation on a strategy for creating tags within a workflow run

softprops avatar Sep 20 '19 03:09 softprops

I'm also struggled with that problem, trying to fix it somehow. Is there any hack on how to create tag automatically after creating and publishing release? Or maybe some option to ignore tag checking (as it worked before)?

Amet13 avatar Sep 21 '19 14:09 Amet13

I notice same error in https://github.com/diofant/diofant/commit/6740f83761a14a06f44ab0b1d001907f70bcba0e/checks?check_suite_id=262644565 This build was initially triggered by tag push, but was unsuccessful due one of slow tests and then - was restarted.

skirpichev avatar Oct 13 '19 13:10 skirpichev

I'm using gitversion for versioning, which handles versioning based on branches... It doesn't work when checking out a tag instead of a branch so I can't use a github workflow triggered by a pushed tag.

I've currently got the following steps:

    - name: Tag
      if: startsWith(github.ref, 'refs/heads/release/')
      run: |
        git tag "v$env:GitVersion_SemVer"
        git push origin "v$env:GitVersion_SemVer"
    - name: Release
      if: startsWith(github.ref, 'refs/heads/release/')
      uses: softprops/action-gh-release@v1
      with:
        name: v${{ env.GitVersion_SemVer }}
        prerelease: ${{ env.GitVersion_PreReleaseLabel != '' }}
        files: ./artifacts/sidekick-*.zip
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Couldn't action-gh-release create the release based on the name I'm providing? What additional information does it need that requires this be a pushed tag that triggered the build?

Alkrun avatar Jan 08 '20 20:01 Alkrun

+1 to this confusion; see no reason that I can't specify a tag name and this Action tags & releases all in one go.

bc3tech avatar Mar 07 '21 00:03 bc3tech

+1 same here

proddy avatar Mar 07 '21 15:03 proddy

+1

roslovets avatar Mar 31 '21 15:03 roslovets

Is this still an issue? I'm triggering release process based on a pull request merge for branches prefixed with release/. I will want to create a tag AND github release in this workflow.

If @softprops is inactive I may look elsewhere. It's unfortunate because it's hard to find an action that will also allow you to upload artifacts.

rcdailey avatar Apr 13 '21 22:04 rcdailey

image Well I added a tag and still got that error :/

git tag 1.1.1
git push origin master 1.1.1

Septias avatar Apr 24 '21 19:04 Septias

anyone managed to get passed this? example would be appreciated.

zapjelly avatar May 12 '21 00:05 zapjelly

I swithed to another action that does it easy.

roslovets avatar May 12 '21 07:05 roslovets

I swithed to another action that does it easy.

same here

proddy avatar May 12 '21 07:05 proddy

I swithed to another action that does it easy.

@roslovets If you did, please mention the name here to help others out. Thank you.

rcdailey avatar May 12 '21 15:05 rcdailey

@roslovets If you did, please mention the name here to help others out. Thank you.

I use ncipollo/release-action to create release just after tagging in the same workflow. Example

roslovets avatar May 12 '21 15:05 roslovets

In fact, as @softprops said, you need a tag to create a release.

Regarding what @Septias said, it still doesn't work after adding the tag, I think it may be that the tag is not pushed to github, for more discussion on this see: Push git commits & tags simultaneously


This issue is basically related to tag_name, and here are a few ways to solve the problem.

  1. Set your action to trigger only when it contains a tag
  2. Specify a tag explicitly

The following example specifies a tag named "test":

    - name: Release user files
      uses: softprops/action-gh-release@v1
      with:
        tag_name: test
        files: |
          file1
          file2

image

Specifying a tag for each commit is annoying. As in the example given by @roslovets, you can use version number control for the tag.

Another example is to specify a tag name for each nightly build version:

    - name: Generate release tag
      id: tag
      run: |
        echo "::set-output name=release_tag::UserBuild_$(date +"%Y.%m.%d_%H-%M")"
    - name: Release user firmware
      uses: softprops/action-gh-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ steps.tag.outputs.release_tag }}
        files: |
          file1
          file2

image

Ahh, you may be wondering why we don't generate times like 08:11? I would like to remind you that the character : is not legal in the git tag.

windowsair avatar Dec 04 '21 08:12 windowsair

Thank you for the clarity and your example approaches, https://github.com/softprops/action-gh-release/issues/20#issuecomment-985988391

staghouse avatar Dec 29 '21 03:12 staghouse

Thanks for this amazing example @windowsair . Also, to point out for someone who will stumble on this issue... that id: tag is important for that section. I didn't add it and wasted 30 minutes trying to figure out why my tag wasn't working.

Xonshiz avatar Apr 09 '22 14:04 Xonshiz

I used another action to get the previous tag

      - name: 'Get Previous tag'
        id: previous_tag
        uses: "WyriHaximus/github-action-get-previous-tag@v1"
        with:
          fallback: 1.0.0
      
      - name: Release        
        uses: softprops/action-gh-release@v1
        with:
          tag_name: ${{steps.previous_tag.outputs.tag}}
          files: ${{steps.sign_app.outputs.signedReleaseFile}}

xianshenglu avatar Apr 30 '22 09:04 xianshenglu

Same issue here despite having tags fetched in a seperate step to checkout. You can also do this by specifying depth: 0 but it also pulls all history.

The check if a tag exists is done against the github ref, Which regardless if a tag is associated/pointing at that commit will refer to the branch name if it's a branch (the Github documentation on this has evolved over the years and not always been accurate!)

Here the ref is checked rather then if a tag is pointing at the commit sha, Which is the way GHA documents it. https://github.com/softprops/action-gh-release/blob/fe9a9bd3295828558c7a3c004f23f3bf77d155b2/src/github.ts#L193-L197

"ref": "refs/heads/REDACTED-123",

I'm not sure what is right or wrong here as based on long running discrepancies in GHA documentation and actual behavior.

Most of the advice on the interwebs is to check this ref for a tag type of ref. To use any tagging at all in my workflow I had to do it this way:

      - name: Check if Git tag exists
      id: check_tag
      run: echo "::set-output name=TAG::$(git tag --points-at ${{github.sha}})"

Going to use the mentioned tag_name param, Thanks everyone.

russmac avatar Aug 12 '22 03:08 russmac

The approach used by all these actions is horrible. All are built around pushing a tag to have a build. It kind of defeats a primary goal of continuous integration - build on every code change. Instead, it's - build on every tag release.

I'm just leaving this comment here with hope it will be helpful as I came up with what I think is an elegant solution. My initial goal was to create a continuous integration system around my C++ CMake project which will build / test / package and ultimately automatically create a release with packages for my matrix configuration, so far only 32-bit and 64-bit windows.

I believe a lot of folks don't realize that all these actions are built using either REST API or nice little utility from GitHub called hub (which I guess is using REST API too): https://hub.github.com. The good thing about it is that it's automatically available on your runners and it's literally 1-line command to create your release which can automatically create a tag for you and upload your packages.

Instead of using action, you can use something like:

      - name: 'Create Release'
        run: hub release create release_name -m release_message -a your_build_artifact.zip
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

The only thing you have to do to make it work is to add permissions to your GitHub token to be able to create releases, that can be done in your repository options. My full workflow example is slightly more complicated but here it is for the reference: https://github.com/superg/redumper/blob/main/.github/workflows/cmake.yml

superg avatar Sep 17 '22 04:09 superg

The approach used by all these actions is horrible. All are built around pushing a tag to have a build. It kind of defeats a primary goal of continuous integration - build on every code change. Instead, it's - build on every tag release.

build ≠ release

kthy avatar Sep 17 '22 13:09 kthy

The approach used by all these actions is horrible. All are built around pushing a tag to have a build. It kind of defeats a primary goal of continuous integration - build on every code change. Instead, it's - build on every tag release.

build ≠ release

Yes, but you want your build deployable one way or another. If you ever used GitHub artifact storage, you're well aware of it's limitation.

superg avatar Sep 17 '22 14:09 superg

The approach used by all these actions is horrible. All are built around pushing a tag to have a build. It kind of defeats a primary goal of continuous integration - build on every code change. Instead, it's - build on every tag release.

build ≠ release

Yes, but having to manually trigger a tag release to do a release is not what I would call continuous automation. Even a manual trigger of your deploy workflow (which you may want to do) will not work, and any other automation that is not creating a tag will not work either.

danielo515 avatar Sep 18 '22 07:09 danielo515

I solved the problem.

https://github.com/ramazansancar/gnojus_wedl-go/blob/master/.github/workflows/release.yaml

It works flawlessly for this place.

All I did was on the command line, respectively:

git tag v1.0.9
git push origin v1.0.9

# Create Tag
git tag <tag>

# Last commit connection the tag
git push origin <tag>

Before: https://github.com/ramazansancar/gnojus_wedl-go/actions/runs/8681675249 image

After: https://github.com/ramazansancar/gnojus_wedl-go/actions/runs/8681705139 image

ramazansancar avatar Apr 15 '24 00:04 ramazansancar