@@ -10,47 +10,123 @@ permissions:
1010 packages : write
1111
1212env :
13+ IMAGE_NAME : cardano-validator-watcher
14+ BINARY_NAME : cardano-validator-watcher
1315 CHART_NAME : cardano-validator-watcher
1416 CHART_DIRECTORY : charts
1517 REGISTRY : oci://ghcr.io/kilnfi/charts
1618
1719jobs :
1820 binaries :
19- runs-on : ubuntu-latest
21+ strategy :
22+ matrix :
23+ os :
24+ - ubuntu-latest
25+ - macos-latest
26+ arch :
27+ - amd64
28+ - arm64
29+ runs-on : ${{ matrix.os }}
30+ env :
31+ ARCH_NAME : ${{ matrix.arch }}
2032 steps :
21- - name : Checkout repository
33+ - name : Checkout code
2234 uses : actions/checkout@v4
23- with :
24- fetch-depth : 0
25- fetch-tags : true
35+
36+ - name : Export Variables
37+ id : export-variables
38+ run : |
39+ if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then
40+ echo "os_name=linux" >> $GITHUB_OUTPUT
41+ elif [ "${{ matrix.os }}" = "macos-latest" ]; then
42+ echo "os_name=darwin" >> $GITHUB_OUTPUT
43+ fi
44+
45+ - name : Install dependencies
46+ run : |
47+ if [ "$OS_NAME" == "linux" ]; then
48+ sudo apt-get update
49+ if [ "${{ matrix.arch }}" == "amd64" ]; then
50+ sudo apt-get install -y build-essential
51+ elif [ "${{ matrix.arch }}" == "arm64" ]; then
52+ sudo apt install -y build-essential gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
53+ fi
54+ elif [ "$OS_NAME" == "darwin" ]; then
55+ brew update
56+ brew install sqlite
57+ fi
58+ env :
59+ OS_NAME : ${{ steps.export-variables.outputs.os_name }}
60+
2661 - name : Set up Go
2762 uses : actions/setup-go@v5
2863 with :
2964 go-version : 1.23
30- - name : Run GoReleaser
31- uses : goreleaser/goreleaser-action@v6
65+
66+ - name : Build ${{matrix.os}}-${{matrix.arch}} binary
67+ id : build
68+ run : |
69+ OUTPUT_NAME="${{ env.BINARY_NAME }}_${{ github.ref_name }}_${OS_NAME}_${ARCH_NAME}"
70+ OUTPUT_DIR=dist/${OUTPUT_NAME}
71+ ARCHIVE_NAME="${OUTPUT_NAME}.tar.gz"
72+
73+ # debug
74+ echo "OUTPUT_NAME=${OUTPUT_NAME}"
75+ echo "DIR=${OUTPUT_DIR}"
76+ echo "ARCH=${ARCH_NAME}"
77+ echo "ARCH2=${{ env.ARCH_NAME}}"
78+
79+ echo "output_dir=${OUTPUT_DIR}" >> $GITHUB_OUTPUT
80+ mkdir -p ${OUTPUT_DIR}
81+
82+ if [ "${OS_NAME}" = "linux" ] && [ "${ARCH_NAME}" = "arm64" ]; then
83+ export CC=aarch64-linux-gnu-gcc
84+ export CXX=aarch64-linux-gnu-g++
85+ fi
86+
87+ CGO_ENABLED=1 GOOS=$OS_NAME GOARCH=$ARCH_NAME \
88+ go build -ldflags="-s -w" -o ${OUTPUT_DIR}/${{ env.BINARY_NAME }} cmd/watcher/main.go
89+ tar -czvf ${OUTPUT_DIR}/${ARCHIVE_NAME} -C ${OUTPUT_DIR} ${{ env.BINARY_NAME }}
90+ env :
91+ OS_NAME : ${{ steps.export-variables.outputs.os_name }}
92+
93+ - name : Upload binaries to release
94+ uses : svenstaro/upload-release-action@v2
3295 with :
33- distribution : goreleaser
34- version : ' ~> v2'
35- args : release --clean
96+ repo_token : ${{ secrets.GITHUB_TOKEN }}
97+ file : " ${{ env.DIRECTORY }}/*.tar.gz"
98+ tag : ${{ github.ref_name }}
99+ file_glob : true
36100 env :
37- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
101+ DIRECTORY : ${{ steps.build.outputs.output_dir }}
38102
39103 images :
40- runs-on : ubuntu-latest
104+ needs : binaries
105+ strategy :
106+ matrix :
107+ os :
108+ - ubuntu-latest
109+ arch :
110+ - amd64
111+ - arm64
112+ runs-on : ${{ matrix.os }}
41113 steps :
42114 - name : Checkout repository
43115 uses : actions/checkout@v4
116+
44117 - name : Set up QEMU
45118 uses : docker/setup-qemu-action@v3
119+
46120 - name : Login to GitHub Container Registry
47121 uses : docker/login-action@v3
48122 with :
49123 registry : ghcr.io
50124 username : ${{ github.actor }}
51125 password : ${{ secrets.GITHUB_TOKEN }}
126+
52127 - name : Set up Docker Buildx
53128 uses : docker/setup-buildx-action@v3
129+
54130 - uses : docker/build-push-action@v6
55131 name : Build & Push Container Images
56132 with :
@@ -59,26 +135,32 @@ jobs:
59135 labels : |-
60136 org.opencontainers.image.source=https://github.com/${{ github.repository }}
61137 org.opencontainers.image.revision=${{ github.sha }}
62- org.opencontainers.image.name=cardano-validator-watcher"
63- org.opencontainers.image.version=${{ github.ref_name }}"
64- 65- platforms : linux/amd64,linux/arm64
138+ org.opencontainers.image.name=${{ env.IMAGE_NAME }}
139+ org.opencontainers.image.version=${{ github.ref_name }}
140+ 141+ platforms : linux/${{matrix.arch}}
66142 push : true
143+ provenance : false
144+ sbom : false
145+ cache-from : type=gha
146+ cache-to : type=gha,mode=max
67147 tags : |-
68- ghcr.io/${{ github.repository_owner }}/cardano-validator-watcher :${{ github.ref_name }}
69- ghcr.io/${{ github.repository_owner }}/cardano-validator-watcher :latest
148+ ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }} :${{ github.ref_name }}
149+ ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }} :latest
70150
71151 helm-chart :
72152 if : false
73- needs : images
74153 runs-on : ubuntu-latest
154+ needs : images
75155 steps :
76156 - name : Checkout
77157 uses : actions/checkout@v4
158+
78159 - name : Set up Helm
7916080161 with :
81162 version : v3.16.4
163+
82164 - name : Verify Chart Version
83165 run : |
84166 TAG=$(echo ${{ github.ref_name }} | sed 's/v//')
@@ -88,15 +170,18 @@ jobs:
88170 exit 1
89171 fi
90172 echo "CHART_VERSION=$CHART_VERSION" >> $GITHUB_ENV
173+
91174 - name : Helm Registry Login
92175 run : |
93176 echo ${{ secrets.GITHUB_TOKEN }} | helm registry login ghcr.io --username ${{ env.USERNAME }} --password-stdin
94177 env :
95178 USERNAME : kilnfi
179+
96180 - name : ' Helm Package'
97181 id : helm-package
98182 run : |
99183 helm package ${{ env.CHART_DIRECTORY }}/${{ env.CHART_NAME }} --version $CHART_VERSION
184+
100185 - name : ' Helm Push'
101186 run : |
102187 helm push ./cardano-validator-watcher-$CHART_VERSION.tgz ${{ env.REGISTRY }}
0 commit comments