Skip to content
tag

GitHub Action

GitHub slug

v1.2.0 Latest version
Use latest version
tag

GitHub slug

GitHub Action to expose slug values of branch/tag/version inside your GitHub workflow

Installation

Copy and paste the following snippet into your .yml file.

- name: GitHub slug
  uses: gacts/github-slug@v1.2.0
Learn more about this action in gacts/github-slug
Choose a version

Logo

GitHub slug action

Release version Build Status License

GitHub Action to expose slug values of branch/tag/version inside your GitHub workflow.

Overview

Slug on a variable will:

  • Put the variable content in lower case
  • Replace special characters like $ or % with dollar and percent respectively
  • Replace any character by - except 0-9, a-z, and -
  • Remove leading, trailing, and duplicated - character

Usage

Add this in your workflow:

- uses: gacts/github-slug@v1
  id: slug
  with:
    # replace value in "to-slug" this on your choice
    to-slug: Hello ${{ github.actor }}! How are you?

And in subsequent steps you will be able to use the following variables:

Description How to use in your workflow Examples for branch/tag workflows
A slugged version of "to-slug" input ${{ steps.slug.outputs.slug }} hello-username-how-are-you
The workflow was triggered on a branch ${{ steps.slug.outputs.is-branch }} true/false
The workflow was triggered on a tag ${{ steps.slug.outputs.is-tag }} false/true
Current branch name ${{ steps.slug.outputs.branch-name }} fix/Foo_bar/<empty-value>
A slugged version of branch-name ${{ steps.slug.outputs.branch-name-slug }} fix-foo-bar/<empty-value>
Current tag name ${{ steps.slug.outputs.tag-name }} <empty-value>/v1.2-rc1_Lorem
A slugged version of tag-name ${{ steps.slug.outputs.tag-name-slug }} <empty-value>/v1-2-rc1-lorem
The commit SHA hash that triggered the workflow ${{ steps.slug.outputs.commit-hash }} ffac537e6cbbf934b08745a378932722df287a53
Short (7 first characters) commit SHA hash ${{ steps.slug.outputs.commit-hash-short }} ffac537
Cleared and slugged version value * ${{ steps.slug.outputs.version }} fix-foo-bar/1.2-rc1-lorem
Major version ${{ steps.slug.outputs.version-major }} 0/1
Minor version ${{ steps.slug.outputs.version-minor }} 0/2
Patch version ${{ steps.slug.outputs.version-patch }} 0/0
Semantic version value ${{ steps.slug.outputs.version-semantic }} 0.0.0-fix-foo-bar/1.2.0-rc1-lorem

* Prefix v/ver/version[._-] will be rejected

Tip: Use Dependabot to maintain your gacts/github-slug version updated in your GitHub workflows.

Examples

On the branch:

on the branch

name: tests

on:
  push:
    branches: [master, main]
    paths-ignore: ['**.md']
    tags-ignore: ['**']
  pull_request:
    paths-ignore: ['**.md']

jobs:
  build:
    name: Build for ${{ matrix.os }} (${{ matrix.arch }})
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false
      matrix:
        os: [linux, darwin]
        arch: [amd64]
    steps:
      - name: Set up Go
        uses: actions/setup-go@v3
        with: {go-version: 1.18}

      - name: Check out code
        uses: actions/checkout@v3

      - uses: gacts/github-slug@v1
        id: slug

      - name: Build application
        env:
          GOOS: ${{ matrix.os }}
          GOARCH: ${{ matrix.arch }}
          CGO_ENABLED: 0
          LDFLAGS: -s -w -X internal/pkg/version.version=${{ steps.slug.outputs.branch-name-slug }}@${{ steps.slug.outputs.commit-hash-short }}
        run: go build -trimpath -ldflags "$LDFLAGS" -o ./app ./cmd/app/

On the tag:

on the tag

name: release

on:
  release: # Docs: <https://help.github.com/en/articles/events-that-trigger-workflows#release-event-release>
    types: [published]

jobs:
  docker-image:
    name: Build the docker image
    runs-on: ubuntu-20.04
    steps:
      - name: Check out code
        uses: actions/checkout@v3

      - uses: gacts/github-slug@v1
        id: slug

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1 # Action page: <https://github.com/docker/login-action>
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GHCR_PASSWORD }} # PAT token, generate new: <https://github.com/settings/tokens/new>

      - uses: docker/build-push-action@v2 # Action page: <https://github.com/docker/build-push-action>
        with:
          context: .
          file: Dockerfile
          push: true
          tags: |
            ghcr.io/${{ github.actor }}/${{ github.event.repository.name }}:${{ steps.slug.outputs.version }}
            ghcr.io/${{ github.actor }}/${{ github.event.repository.name }}:latest

Releasing

New versions releasing scenario:

  • Make required changes in the changelog file
  • Build the action distribution (make build or yarn build)
  • Commit and push changes (including dist directory changes - this is important) into the master branch
  • Publish new release using repo releases page (git tag should follow vX.Y.Z format)

Major and minor git tags (v1 and v1.2 if you publish v1.2.Z release) will be updated automatically.

Support

Issues Issues

If you will find any action errors - please, make an issue in the current repository.

License

This is open-sourced software licensed under the MIT License.