|
21 | 21 | jobs: |
22 | 22 | binaries: |
23 | 23 | strategy: |
| 24 | + fail-fast: false |
24 | 25 | matrix: |
25 | | - os: |
26 | | - - ubuntu-latest |
27 | | - - macos-latest |
28 | | - arch: |
29 | | - - amd64 |
30 | | - - arm64 |
31 | | - runs-on: ${{ matrix.os }} |
| 26 | + include: |
| 27 | + - runner: fixed-egress-4c-16g |
| 28 | + os_name: linux |
| 29 | + arch: amd64 |
| 30 | + - runner: fixed-egress-4c-16g |
| 31 | + os_name: linux |
| 32 | + arch: arm64 |
| 33 | + - runner: macos-latest |
| 34 | + os_name: darwin |
| 35 | + arch: amd64 |
| 36 | + - runner: macos-latest |
| 37 | + os_name: darwin |
| 38 | + arch: arm64 |
| 39 | + runs-on: ${{ matrix.runner }} |
32 | 40 | env: |
33 | 41 | ARCH_NAME: ${{ matrix.arch }} |
| 42 | + OS_NAME: ${{ matrix.os_name }} |
34 | 43 | steps: |
35 | 44 | - name: Checkout code |
36 | 45 | uses: actions/checkout@v5 |
37 | 46 |
|
38 | | - - name: Export Variables |
39 | | - id: export-variables |
40 | | - run: | |
41 | | - if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then |
42 | | - echo "os_name=linux" >> $GITHUB_OUTPUT |
43 | | - elif [ "${{ matrix.os }}" = "macos-latest" ]; then |
44 | | - echo "os_name=darwin" >> $GITHUB_OUTPUT |
45 | | - fi |
46 | | -
|
47 | | - - name: Install dependencies |
48 | | - run: | |
49 | | - if [ "$OS_NAME" == "linux" ]; then |
50 | | - sudo apt-get update |
51 | | - if [ "${{ matrix.arch }}" == "amd64" ]; then |
52 | | - sudo apt-get install -y build-essential |
53 | | - elif [ "${{ matrix.arch }}" == "arm64" ]; then |
54 | | - sudo apt install -y build-essential gcc-aarch64-linux-gnu g++-aarch64-linux-gnu |
55 | | - fi |
56 | | - elif [ "$OS_NAME" == "darwin" ]; then |
57 | | - brew update |
58 | | - brew install sqlite |
59 | | - fi |
60 | | - env: |
61 | | - OS_NAME: ${{ steps.export-variables.outputs.os_name }} |
62 | 47 |
|
63 | 48 | - name: Set up Go |
64 | 49 | uses: actions/setup-go@v6 |
65 | 50 | with: |
66 | 51 | go-version: 1.26 |
67 | 52 |
|
68 | | - - name: Build ${{matrix.os}}-${{matrix.arch}} binary |
| 53 | + - name: Build ${{ matrix.os_name }}-${{ matrix.arch }} binary |
69 | 54 | id: build |
| 55 | + shell: bash |
70 | 56 | run: | |
| 57 | + set -euo pipefail |
| 58 | +
|
71 | 59 | OUTPUT_NAME="${{ env.BINARY_NAME }}_${{ github.event.inputs.tag || github.ref_name }}_${OS_NAME}_${ARCH_NAME}" |
72 | | - OUTPUT_DIR=dist/${OUTPUT_NAME} |
| 60 | + OUTPUT_DIR="dist/${OUTPUT_NAME}" |
73 | 61 | ARCHIVE_NAME="${OUTPUT_NAME}.tar.gz" |
| 62 | + ARCHIVE_PATH="${OUTPUT_DIR}/${ARCHIVE_NAME}" |
74 | 63 |
|
75 | | - echo "output_dir=${OUTPUT_DIR}" >> $GITHUB_OUTPUT |
76 | | - mkdir -p ${OUTPUT_DIR} |
| 64 | + echo "archive_path=${ARCHIVE_PATH}" >> "$GITHUB_OUTPUT" |
| 65 | + mkdir -p "${OUTPUT_DIR}" |
77 | 66 |
|
78 | | - if [ "${OS_NAME}" = "linux" ] && [ "${ARCH_NAME}" = "arm64" ]; then |
79 | | - export CC=aarch64-linux-gnu-gcc |
80 | | - export CXX=aarch64-linux-gnu-g++ |
81 | | - fi |
| 67 | + CGO_ENABLED=0 GOOS="$OS_NAME" GOARCH="$ARCH_NAME" \ |
| 68 | + go build -ldflags="-s -w" -o "${OUTPUT_DIR}/${{ env.BINARY_NAME }}" cmd/watcher/main.go |
82 | 69 |
|
83 | | - CGO_ENABLED=1 GOOS=$OS_NAME GOARCH=$ARCH_NAME \ |
84 | | - go build -ldflags="-s -w" -o ${OUTPUT_DIR}/${{ env.BINARY_NAME }} cmd/watcher/main.go |
85 | | - tar -czvf ${OUTPUT_DIR}/${ARCHIVE_NAME} -C ${OUTPUT_DIR} ${{ env.BINARY_NAME }} |
86 | | - env: |
87 | | - OS_NAME: ${{ steps.export-variables.outputs.os_name }} |
| 70 | + tar -czvf "${ARCHIVE_PATH}" -C "${OUTPUT_DIR}" "${{ env.BINARY_NAME }}" |
88 | 71 |
|
89 | 72 | - name: Upload binary artifact |
90 | 73 | uses: actions/upload-artifact@v4 |
91 | 74 | with: |
92 | | - name: binary-${{ steps.export-variables.outputs.os_name }}-${{ matrix.arch }} |
93 | | - path: "${{ steps.build.outputs.output_dir }}/*.tar.gz" |
| 75 | + name: binary-${{ matrix.os_name }}-${{ matrix.arch }} |
| 76 | + path: ${{ steps.build.outputs.archive_path }} |
94 | 77 | if-no-files-found: error |
95 | 78 | retention-days: 1 |
96 | 79 |
|
|
0 commit comments