name: Build Process Supervisor on: push: tags: - '*' env: APP_NAME: processSupervisor jobs: build: runs-on: ubuntu-latest strategy: matrix: include: - os: windows arch: amd64 ext: .exe - os: linux arch: amd64 ext: "" - os: linux arch: arm64 ext: "" - os: linux arch: arm arm_version: 6 ext: "" steps: - name: Checkout repo uses: actions/checkout@v4 - name: Ensure latest Go is installed in /data/go run: | export GOROOT=/data/go/go export PATH=$GOROOT/bin:$PATH export GOCACHE=/data/gocache export GOMODCACHE=/data/gomodcache mkdir -p $GOCACHE $GOMODCACHE if [ ! -x "$GOROOT/bin/go" ]; then echo "Go not found in $GOROOT, downloading latest stable..." GO_VERSION=$(curl -s https://go.dev/VERSION?m=text | tr -d '\n\r') echo "Latest version is $GO_VERSION" mkdir -p /data/go curl -sSL "https://go.dev/dl/${GO_VERSION}.linux-amd64.tar.gz" -o /tmp/go.tar.gz tar -C /data/go -xzf /tmp/go.tar.gz else echo "Using cached Go from $GOROOT" fi go version - name: Cache Go build and module cache in /data uses: actions/cache@v4 with: path: | /data/gocache /data/gomodcache key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Download Go dependencies run: | export GOROOT=/data/go/go export PATH=$GOROOT/bin:$PATH export GOCACHE=/data/gocache export GOMODCACHE=/data/gomodcache mkdir -p $GOCACHE $GOMODCACHE go mod download - name: Build binary run: | export GOROOT=/data/go/go export PATH=$GOROOT/bin:$PATH export GOCACHE=/data/gocache export GOMODCACHE=/data/gomodcache mkdir -p $GOCACHE $GOMODCACHE OUTPUT="bin/${APP_NAME}-${{ matrix.os }}-${{ matrix.arch }}" if [ -n "${{ matrix.arm_version }}" ]; then OUTPUT="${OUTPUT}v${{ matrix.arm_version }}" export GOARM=${{ matrix.arm_version }} fi OUTPUT="${OUTPUT}${{ matrix.ext }}" echo "Building $OUTPUT" GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} go build -ldflags="-s -w" -trimpath -o "$OUTPUT" shell: bash - name: Zip artifact run: | zip bin/${{ env.APP_NAME }}-${{ matrix.os }}-${{ matrix.arch }}.zip bin/${{ env.APP_NAME }}-* - name: Upload zipped artifact uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-${{ matrix.os }}-${{ matrix.arch }} path: bin/${{ env.APP_NAME }}-${{ matrix.os }}-${{ matrix.arch }}.zip