Skip to content

anton-yurchenko/git-release

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

git-release

Release Code Coverage Go Report Card Release Docker Pulls License

A GitHub Action for a GitHub Release creation with Assets and Changelog on new Git Tag in the repository.

PIC

Features

  • Parse Tag to match Semantic Versioning
  • Upload build artifacts (assets) to the release
  • Publish release with changelog
  • Supported runners:
    • Linux AMD64
    • Linux ARM64
    • Windows
  • Filename pattern matching
  • Supports GitHub Enterprise
  • Supports standard v prefix out of the box
  • Allows custom SemVer prefixes
  • Update a single pre-release with changes from Unreleased scope
  • Retry assets upload on network interrupts

Manual

  1. Add changes to CHANGELOG.md. For example:

    ## [3.4.0] - 2020-07-10
    ### Added
    - Glob pattern support
    - Unit Tests
    - Log version
    
    ### Fixed
    - Exception on margins larger than context of changelog
    - Nil pointer exception in 'release' package
    
    ### Changed
    - Refactor JavaScript wrapper
    
    ## [3.3.0] - 2020-06-27
    ### Added
    - Wrapper script: allow execution on Windows runners
    
    ### Changed
    - Action execution through Git: from Docker to NodeJS
    
    [3.4.0]: https://github.com/anton-yurchenko/git-release/compare/v3.3.0...v3.4.0
    [3.3.0]: https://github.com/anton-yurchenko/git-release/releases/tag/v3.3.0
  2. Tag a commit with Version (according to semver.org)

  3. Push and watch Git-Release publishing a Release on GitHub 😉

    PIC

Configuration

  1. Change the workflow to be triggered on new Tag:

    • For example '*' or a more specific like 'v*':
    on:
      push:
        tags:
        - "v[0-9]+.[0-9]+.[0-9]+"
  2. Add Release step to your workflow:

        - name: Release
          uses: docker://antonyurchenko/git-release:v5
          env:
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          with:
            args: build/*.zip
  3. Configure Release step:

    • Specify release assets as action arguments (divided by one of: new line, space, comma, pipe)
    • Fine tune action configuration using environmental variables:
    Environmental Variable Allowed Values Default Value Description
    DRAFT_RELEASE true/false false Publish a draft release
    PRE_RELEASE true/false false Mark release non-production ready
    CHANGELOG_FILE * CHANGELOG.md Changelog filename (set none to silence a warning message if file does not exist)
    ALLOW_EMPTY_CHANGELOG true/false false Allow publishing a release without changelog
    TAG_PREFIX_REGEX * [v]? Version tag prefix regex, for example [a-z-]* in order to parse prerelease-1.1.0
    RELEASE_NAME * "" Complete release title (should not be combined with RELEASE_NAME_PREFIX and RELEASE_NAME_SUFFIX)
    RELEASE_NAME_PREFIX * "" Release title prefix
    RELEASE_NAME_SUFFIX * "" Release title suffix
    UNRELEASED update/delete "" Set to update in order to allow deletion and recreation of the same release and its tag (intended to be used for unreleased/latest release only). Set to delete in order to delete a previously published unreleased/latest release.
    UNRELEASED_TAG latest * Use a custom tag for unreleased/latest release (tag will be created/deleted automatically)

    Configuration is provided as environmental variables (strings), so do not forget to enclose boolean values with quotes

ℹ️ Windows Runners

Execute git-release through JavaScrip Wrapper on Windows Runners.

    - name: Release
      uses: anton-yurchenko/git-release@main
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        args: |
            build\\darwin-amd64.zip
            build\\linux-amd64.zip
            build\\windows-amd64.zip

ℹ️ Configuration Examples

Remarks

  • This action has multiple tags: latest / v1 / v1.2 / v1.2.3. You may lock to a certain version instead of using latest.
    (Recommended to lock against a major version, for example v4)
  • Instead of using a pre-built Docker image, you may execute the action through JavaScript wrapper by changing docker://antonyurchenko/git-release:latest to anton-yurchenko/git-release@main
  • git-release operates assets with pattern matching, this means that it is unable to validate whether an asset exists
  • Docker image is published both to Docker Hub and GitHub Packages. If you don't want to rely on Docker Hub but still want to use the dockerized action, you may switch from uses: docker://antonyurchenko/git-release:latest to uses: docker://ghcr.io/anton-yurchenko/git-release:latest
  • Slashes (/) in asset filenames will be replaced with dashes (-)
  • git-release may crash when executed against a not supported changelog file format. Make sure your changelog file is compliant to one of the supported formats.

License

MIT © 2019-present Anton Yurchenko