Skip to content
play

GitHub Action

Go Release Action

v1.4.7 Latest version

Go Release Action

play

Go Release Action

Build release for go

Installation

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

              

- name: Go Release Action

uses: Mmx233/GoReleaseCli@v1.4.7

Learn more about this action in Mmx233/GoReleaseCli

Choose a version

GoReleaseCli

Lisense Release GoReport

English | 中文

~$ release --help-long
usage: release [<flags>] <target>

Golang build production release helper.

Flags:
  -h, --[no-]help            Show context-sensitive help (also try --help-long
                             and --help-man).
  -v, --[no-]version         Show application version.
  -j, --thread=(NumCpu+1)    How many threads to use for parallel compilation.
  -c, --compress=COMPRESS    Compress the binary into the specified format of
                             compressed file.
      --[no-]disable-default-ldflags
                             Disable ldflags added by default.
      --[no-]disable-auto-clean  Files in output dir will be kept.
      --mod-download-args=MOD-DOWNLOAD-ARGS
                             custom args for go mod download.
      --ldflags=LDFLAGS      Add custom ldflags.
      --[no-]cgo             Enable go cgo.
      --os=OS                Target os.
      --arch=ARCH            Target arch.
      --platforms=PLATFORMS  Specify platforms
      --[no-]extra-arches    Build all extra arches.
      --[no-]extra-arches-show-default
                             Show default extra arch name.
  -d, --output="build"       Output dir path.
  -f, --output-format=OUTPUT-FORMAT  
                             Output file name format.
  -o, --name=NAME            Output binary file name.
      --divider="-"          Divider in name.

Args:
  <target>  Target package.

🎷 Usage

CGO, soft-float, compression is disabled by default.

By default, this program will compile for all architecture types. You can use the flags --os and --arch to specify the operating system or architecture, separated by commas. The program will automatically match valid architectures for compilation.

~$ release ./cmd/release
~$ release ./cmd/release --os linux,windows
~$ release ./cmd/release --arch amd64,386

If you want to ignore embeded architectures and specify platforms by hand, you can use --platforms to achieve this goal. Platforms specified by this flag will not be checked.

~$ release ./cmd/release --platforms linux/386,windows/amd64

# You can also combine these two methods
~$ release ./cmd/release --os linux --arch 386 --platforms windows/amd64 

During compilation, default ldflags include -extldflags "-static -fpic" -s -w as well as -trimpath. If additional custom ldflags are needed, you can use an additional flag to append them.

~$ release ./cmd/release --ldflags='-X main.Version=5.5.5'

~$ release ./cmd/release --disable-default-ldflags # Remove default ldflags.

When using --extra-arches, all child arches such as arm/v6, arm/v7 will be built.

By default, default arch will not add extra suffix to describe it's accurate arch. You can change this with --extra-arches-show-default flag.

~$ release ./cmd/release --extra-arches

~$ release ./cmd/release --extra-arches --extra-arches-show-default # Add arch suffix to default arch.

Compress to the specified format, dependent on the 7z library. If 7z library is not exist, it will try to use zip + zipnote or tar for different format. Currently supported formats include zip and tar.gz.

~$ release  ./cmd/release -c tar.gz

By default, the directory name of the target directory will be used, and the compilation result will be placed in the build directory. This can also be modified using flags.

~$ release ./cmd/release --output dist # Modify the output directory to be "dist"
~$ release ./cmd/release -d dist

~$ release ./cmd/release --name asd # Change the name to "asd".
~$ release ./cmd/release -o asd

🏭 Use in GitHub Action

Build in container

name: Release

on:
  push:
    tags:
      - v**
jobs:
  release_docker:
    runs-on: ubuntu-latest
    steps:

  release:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Build
        uses: Mmx233/GoReleaseCli@v1.2.2
        with:
          target: ./cmd/derper
          compress: tar.gz

      - name: Upload assets
        uses: softprops/action-gh-release@v1
        with:
          files: build/*.tar.gz
          prerelease: false

Build in runner environment

name: Release

on:
  push:
    tags:
      - v**
jobs:
  release_docker:
    runs-on: ubuntu-latest
    steps:

  release:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - uses: actions/setup-go@v5
        with:
          go-version: 'stable'

      - name: Setup Release Cli
        uses: robinraju/release-downloader@v1.10
        with:
          repository: "Mmx233/GoReleaseCli"
          latest: true
          fileName: 'release_linux_amd64.tar.gz'
          extract: true
          out-file-path: './build/'

      - name: Build
        run: ./build/release ./cmd/derper --perm 777 -c tar.gz --extra-arches --output build/output

      - name: Upload assets
        uses: softprops/action-gh-release@v1
        with:
          files: build/output/*.tar.gz
          prerelease: false