11name : Release Build
22
3+ # Runs when a GitHub Release is published (you create the release for an existing tag, or
4+ # create tag + release together in the UI). Assets are built and attached to that release.
5+ # Optional: workflow_dispatch with a tag for manual builds (creates/updates release assets).
36on :
4- push :
5- tags :
6- - " v*.*.*"
7+ release :
8+ types : [published]
79 workflow_dispatch :
10+ inputs :
11+ tag :
12+ description : " Existing git tag to build (e.g. v1.0.0)"
13+ required : true
14+ type : string
815
916permissions :
1017 contents : write
1118 packages : write
12- issues : write
13- pull-requests : write
1419
1520env :
1621 CARGO_TERM_COLOR : always
1722 RUST_BACKTRACE : 1
1823
1924jobs :
20- create-release :
25+ metadata :
2126 runs-on : ubuntu-latest
2227 outputs :
23- upload_url : ${{ steps.create_release .outputs.upload_url }}
24- version : ${{ steps.version .outputs.version }}
28+ tag : ${{ steps.meta .outputs.tag }}
29+ version : ${{ steps.meta .outputs.version }}
2530 steps :
26- - name : Get version from tag
27- id : version
28- run : echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
29-
30- - name : Create Release
31- id : create_release
32- uses : actions/create-release@v1
33- env :
34- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
35- with :
36- tag_name : ${{ github.ref_name }}
37- release_name : Release ${{ github.ref_name }}
38- draft : false
39- prerelease : false
31+ - id : meta
32+ run : |
33+ if [ "${{ github.event_name }}" = "release" ]; then
34+ TAG="${{ github.event.release.tag_name }}"
35+ else
36+ TAG="${{ github.event.inputs.tag }}"
37+ fi
38+ if [[ ! "$TAG" =~ ^v ]]; then
39+ echo "::error::Tag must start with v (got: $TAG)"
40+ exit 1
41+ fi
42+ echo "tag=$TAG" >> "$GITHUB_OUTPUT"
43+ echo "version=${TAG#v}" >> "$GITHUB_OUTPUT"
4044
4145 build-linux :
42- needs : create-release
43- runs-on : ubuntu-latest
46+ needs : metadata
47+ runs-on : blacksmith-2vcpu- ubuntu-2204
4448 container :
4549 image : ubuntu:latest
4650 steps :
47- - uses : actions/checkout@v3
51+ - uses : actions/checkout@v4
52+ with :
53+ ref : ${{ needs.metadata.outputs.tag }}
4854
4955 - name : Install build dependencies
5056 run : |
@@ -71,55 +77,45 @@ jobs:
7177 run : |
7278 cargo build --release --target x86_64-unknown-linux-gnu
7379 mkdir -p build/release
74-
75- # Copy the binary
7680 cp target/x86_64-unknown-linux-gnu/release/hardware_report build/release/hardware_report-linux-x86_64
77-
78- # Strip the binary to reduce size
7981 strip build/release/hardware_report-linux-x86_64
8082
8183 - name : Create tarball
8284 run : |
85+ VERSION="${{ needs.metadata.outputs.version }}"
8386 cd build/release
84- tar czf hardware_report-linux-x86_64-${{ needs.create-release.outputs.version }} .tar.gz hardware_report-linux-x86_64
85- sha256sum hardware_report-linux-x86_64-${{ needs.create-release.outputs.version }} .tar.gz > hardware_report-linux-x86_64-${{ needs.create-release.outputs.version }} .tar.gz.sha256
87+ tar czf " hardware_report-linux-x86_64-${VERSION} .tar.gz" hardware_report-linux-x86_64
88+ sha256sum " hardware_report-linux-x86_64-${VERSION} .tar.gz" > " hardware_report-linux-x86_64-${VERSION} .tar.gz.sha256"
8689
87- - name : Upload Release Asset
88- uses : actions/upload-release-asset@v1
89- env :
90- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
91- with :
92- upload_url : ${{ needs.create-release.outputs.upload_url }}
93- asset_path : build/release/hardware_report-linux-x86_64-${{ needs.create-release.outputs.version }}.tar.gz
94- asset_name : hardware_report-linux-x86_64-${{ needs.create-release.outputs.version }}.tar.gz
95- asset_content_type : application/gzip
96-
97- - name : Upload SHA256 checksum
98- uses : actions/upload-release-asset@v1
99- env :
100- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
90+ - name : Upload build artifacts
91+ uses : actions/upload-artifact@v4
10192 with :
102- upload_url : ${{ needs.create -release.outputs.upload_url }}
103- asset_path : build/release/hardware_report-linux-x86_64-${{ needs.create-release.outputs.version }}.tar.gz.sha256
104- asset_name : hardware_report-linux-x86_64-${{ needs.create- release.outputs.version }}. tar.gz.sha256
105- asset_content_type : text/plain
106-
107- build-debian :
108- needs : create-release
109- runs-on : ubuntu-latest
93+ name : linux -release
94+ path : |
95+ build/ release/*. tar.gz
96+ build/release/*.sha256
97+
98+ build-linux-arm64 :
99+ needs : metadata
100+ runs-on : blacksmith-2vcpu- ubuntu-2204-arm
110101 steps :
111- - uses : actions/checkout@v3
102+ - uses : actions/checkout@v4
103+ with :
104+ ref : ${{ needs.metadata.outputs.tag }}
112105
113106 - name : Install build dependencies
114107 run : |
115108 sudo apt-get update
116109 sudo apt-get install -y \
117110 build-essential \
118111 curl \
112+ numactl \
113+ pciutils \
114+ ethtool \
115+ dmidecode \
116+ ipmitool \
119117 pkg-config \
120- libssl-dev \
121- dpkg-dev \
122- debhelper
118+ libssl-dev
123119
124120 - name : Install Rust toolchain
125121 uses : actions-rs/toolchain@v1
@@ -128,64 +124,54 @@ jobs:
128124 override : true
129125
130126 - name : Build release binary
131- run : cargo build --release
127+ run : |
128+ cargo build --release
129+ mkdir -p build/release
130+ cp target/release/hardware_report build/release/hardware_report-linux-aarch64
131+ strip build/release/hardware_report-linux-aarch64
132132
133- - name : Create Debian package structure
133+ - name : Create tarball
134134 run : |
135- VERSION=${{ needs.create-release.outputs.version }}
136- mkdir -p debian-pkg/hardware-report_${VERSION}_amd64/{DEBIAN,usr/bin,usr/share/doc/hardware-report}
137-
138- # Copy binary
139- cp target/release/hardware_report debian-pkg/hardware-report_${VERSION}_amd64/usr/bin/
140-
141- # Create control file
142- cat > debian-pkg/hardware-report_${VERSION}_amd64/DEBIAN/control << EOF
143- Package: hardware-report
144- Version: ${VERSION}
145- Architecture: amd64
146- Maintainer: Kenny Sheridan <kenny@sfcompute.com>
147- Description: Hardware information collection tool
148- A tool for generating detailed hardware information reports from Linux servers,
149- outputting the data in TOML format for infrastructure standardization.
150- Depends: numactl, ipmitool, ethtool, util-linux, pciutils
151- Priority: optional
152- Section: utils
153- EOF
154-
155- # Create copyright file
156- cat > debian-pkg/hardware-report_${VERSION}_amd64/usr/share/doc/hardware-report/copyright << EOF
157- Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
158- Upstream-Name: hardware_report
159- Source: https://github.com/sfcompute/hardware_report
160-
161- Files: *
162- Copyright: 2024 Kenny Sheridan
163- License: MIT
164- EOF
165-
166- # Build the package
167- dpkg-deb --build debian-pkg/hardware-report_${VERSION}_amd64
168- mv debian-pkg/hardware-report_${VERSION}_amd64.deb .
169-
170- # Generate checksum
171- sha256sum hardware-report_${VERSION}_amd64.deb > hardware-report_${VERSION}_amd64.deb.sha256
172-
173- - name : Upload Debian package
174- uses : actions/upload-release-asset@v1
175- env :
176- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
135+ VERSION="${{ needs.metadata.outputs.version }}"
136+ cd build/release
137+ tar czf "hardware_report-linux-aarch64-${VERSION}.tar.gz" hardware_report-linux-aarch64
138+ sha256sum "hardware_report-linux-aarch64-${VERSION}.tar.gz" > "hardware_report-linux-aarch64-${VERSION}.tar.gz.sha256"
139+
140+ - name : Upload build artifacts
141+ uses : actions/upload-artifact@v4
142+ with :
143+ name : linux-arm64-release
144+ path : |
145+ build/release/*.tar.gz
146+ build/release/*.sha256
147+
148+ attach-assets :
149+ needs :
150+ - metadata
151+ - build-linux
152+ - build-linux-arm64
153+ runs-on : ubuntu-latest
154+ steps :
155+ - name : Download Linux x86_64 artifacts
156+ uses : actions/download-artifact@v4
177157 with :
178- upload_url : ${{ needs.create-release.outputs.upload_url }}
179- asset_path : hardware-report_${{ needs.create-release.outputs.version }}_amd64.deb
180- asset_name : hardware-report_${{ needs.create-release.outputs.version }}_amd64.deb
181- asset_content_type : application/vnd.debian.binary-package
158+ name : linux-release
159+ path : dist
182160
183- - name : Upload Debian package checksum
184- uses : actions/upload-release-asset@v1
161+ - name : Download Linux arm64 artifacts
162+ uses : actions/download-artifact@v4
163+ with :
164+ name : linux-arm64-release
165+ path : dist
166+
167+ - name : Upload release assets
168+ uses : softprops/action-gh-release@v2
169+ with :
170+ tag_name : ${{ needs.metadata.outputs.tag }}
171+ working_directory : dist
172+ fail_on_unmatched_files : true
173+ files : |
174+ *.tar.gz
175+ *.tar.gz.sha256
185176 env :
186177 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
187- with :
188- upload_url : ${{ needs.create-release.outputs.upload_url }}
189- asset_path : hardware-report_${{ needs.create-release.outputs.version }}_amd64.deb.sha256
190- asset_name : hardware-report_${{ needs.create-release.outputs.version }}_amd64.deb.sha256
191- asset_content_type : text/plain
0 commit comments