Skip to content
Snippets Groups Projects
Select Git revision
  • 6be3df0ca6aa7d133571d16d7bf4df63c03e18a6
  • master default protected
  • docs/remove-link
  • v2.31.0
  • v2.30.0
  • v2.29.0
  • v2.28.0
  • v2.27.1
  • v2.27.0
  • v2.26.1
  • v2.26.0
  • v2.25.0
  • v2.24.1
  • v2.24.0
  • v2.23.1
  • v2.23.0
  • v2.22.4
  • v2.22.3
  • v2.22.2
  • v2.22.1
  • v2.22.0
  • v2.21.0
  • v2.20.2
23 results

semantic-release

  • Clone with SSH
  • Clone with HTTPS
  • user avatar
    Christoph Witzko authored
    6be3df0c
    History

    :package::rocket: semantic-release

    CI Build Status pipeline status Go Report Card

    fully automated package/module/image publishing

    A more lightweight and standalone version of semantic-release.

    How does it work?

    Instead of writing meaningless commit messages, we can take our time to think about the changes in the codebase and write them down. Following the AngularJS Commit Message Conventions it is then possible to generate a helpful changelog and to derive the next semantic version number from them.

    When semantic-release is setup it will do that after every successful continuous integration build of your master branch (or any other branch you specify) and publish the new version for you. This way no human is directly involved in the release process and your releases are guaranteed to be unromantic and unsentimental.

    Source: semantic-release/semantic-release#how-does-it-work

    You can enforce semantic commit messages using a git hook.

    Installation

    Install the latest version of semantic-release

    curl -SL https://get-release.xyz/semantic-release/linux/amd64 -o ./semantic-release && chmod +x ./semantic-release

    Example GitHub Release

    GitHub token

    It is necessary to create a new GitHub token with the repo or public_repo scope here. You can set the GitHub token via the GITHUB_TOKEN environment variable or the -token flag.

    .travis.yml

    language: go
    go:
      - 1.x
    install:
      - curl -SL https://get-release.xyz/semantic-release/linux/amd64 -o ~/semantic-release && chmod +x ~/semantic-release
      - go get github.com/mitchellh/gox
      - go get github.com/tcnksm/ghr
    after_success:
      - ./release
    notifications:
      email: false

    release

    #!/bin/bash
    set -e
    
    ~/semantic-release -ghr -vf
    export VERSION=$(cat .version)
    gox -ldflags="-s -w" -output="bin/{{.Dir}}_v"$VERSION"_{{.OS}}_{{.Arch}}"
    ghr $(cat .ghr) bin/
    

    Example Docker Hub

    The environment variables GITHUB_TOKEN, DOCKER_USERNAME and DOCKER_PASSWORD must be set.

    .travis.yml

    language: go
    services:
      - docker
    go:
      - 1.x
    install:
      - curl -SL https://get-release.xyz/semantic-release/linux/amd64 -o ~/semantic-release && chmod +x ~/semantic-release
    after_success:
      - ./release
    notifications:
      email: false

    release

    #!/bin/bash
    
    set -e
    
    # run semantic-release
    ~/semantic-release -vf
    export VERSION=$(cat .version)
    
    # docker build
    export IMAGE_NAME="user/imagename"
    export IMAGE_NAME_VERSION="$IMAGE_NAME:$VERSION"
    
    docker build -t $IMAGE_NAME_VERSION .
    docker tag $IMAGE_NAME_VERSION $IMAGE_NAME
    
    # push to docker hub
    docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
    docker push $IMAGE_NAME_VERSION
    docker push $IMAGE_NAME
    

    Example npm

    The environment variables GITHUB_TOKEN and NPM_TOKEN must be set.

    .travis.yml

    language: node_js
    cache:
      directories:
        - node_modules
    notifications:
      email: false
    node_js:
      - '7'
      - '6'
      - '4'
    after_success:
      - curl -SL https://get-release.xyz/semantic-release/linux/amd64 -o ~/semantic-release && chmod +x ~/semantic-release
      - ~/semantic-release -update package.json && npm publish
    branches:
      except:
        - /^v\d+\.\d+\.\d+$/

    Example GitLab CI Config

    GitLab token

    It is necessary to create a new Gitlab personal access token with the api scope here. Ensure the CI variable is protected and masked as the GITLAB_TOKEN has a lot of rights. There is an open issue for project specific tokens You can set the GitLab token via the GITLAB_TOKEN environment variable or the -token flag.

    .gitlab-ci.yml

     stages:
      # other stages
      - release
    
    release:
      image: registry.gitlab.com/go-semantic-release/semantic-release:latest # Replace this with the current release
      stage: release
      # Remove this if you want a release created for each push to master
      when: manual
      only:
        - master
      script:
        - release

    Beta release support

    Beta release support empowers you to release beta, rc, etc. versions with semantic-release (e.g. v2.0.0-beta.1). To enable this feature you need to create a new branch (e.g. beta/v2) and check in a .semrelrc file with the following content:

    {
      "maintainedVersion": "2-beta"
    }

    If you commit to this branch a new incremental pre-release is created everytime you push. (2.0.0-beta.1, 2.0.0-beta.2, ...)

    Licence

    The MIT License (MIT)

    Copyright © 2020 Christoph Witzko