summaryrefslogtreecommitdiff
path: root/.github/workflows/create-release.yml
blob: 317104789ada2afe593ee485683a29a7a0fcb830 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
on:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
      - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

name: Create Release

jobs:
  build:

    name: Create Release

    # START build targets
    strategy:
      matrix:
        # Include amd64 on all platforms.
        goos: [ windows, freebsd, openbsd, linux, dragonfly, darwin ]
        goarch: [ amd64, 386 ]
        exclude:
          # Exclude i386 on darwin and dragonfly.
          - goarch: 386
            goos: dragonfly
          - goarch: 386
            goos: darwin
        include:
          # BEGIN Linux ARM 5 6 7
          - goos: linux
            goarch: arm
            goarm: 7
          - goos: linux
            goarch: arm
            goarm: 6
          - goos: linux
            goarch: arm
            goarm: 5
          # END Linux ARM 5 6 7
          # BEGIN Windows ARM 7
          - goos: windows
            goarch: arm
            goarm: 7
          # END Windows ARM 7
          # BEGIN FreeBSD ARM 6 7
          - goos: freebsd
            goarch: arm
            goarm: 6
          - goos: freebsd
            goarch: arm
            goarm: 7
          # END FreeBSD ARM 6 7
          # BEGIN OpenBSD ARM 6 7
          - goos: openbsd
            goarch: arm
            goarm: 6
          - goos: openbsd
            goarch: arm
            goarm: 7
          # END OpenBSD ARM 6 7
          # BEGIN Other architectures
          - goos: darwin
            goarch: arm64
          - goos: linux
            goarch: arm64
          - goos: linux
            goarch: riscv64
          - goos: windows
            goarch: arm64
          - goos: android
            goarch: arm64
          - goos: freebsd
            goarch: arm64
          - goos: openbsd
            goarch: arm64
          # BEGIN MIPS
          - goos: linux
            goarch: mips64
          - goos: linux
            goarch: mips64le
          - goos: linux
            goarch: mipsle
          - goos: linux
            goarch: mips
          # END MIPS
          # END Other architectures
      fail-fast: false
    # END build targets

    runs-on: ubuntu-latest

    env:
      GOOS: ${{ matrix.goos }}
      GOARCH: ${{ matrix.goarch }}
      GOARM: ${{ matrix.goarm }}
      CGO_ENABLED: 0

    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Set up Go
        uses: actions/setup-go@v3
        with:
          go-version: ^1.19

      - name: Get project dependencies
        run: go mod download

      - name: Set asset filename for non-Windows OSes
        if: matrix.goos != 'windows'
        run: echo "ASSET_NAME=$GOOS-$GOARCH$GOARM" >> $GITHUB_ENV

      - name: Set asset filename for Windows
        if: matrix.goos == 'windows'
        run: echo "ASSET_NAME=$GOOS-$GOARCH$GOARM.exe" >> $GITHUB_ENV

      - name: Build binaries
        run: |
          mkdir -p build_assets
          go build -v -o build_assets/$ASSET_NAME -trimpath

      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}
          prerelease: true

      - name: Upload binary file to release
        id: upload-release-asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./build_assets/$ASSET_NAME
          asset_name: $ASSET_NAME
          asset_content_type: application/octet-stream