Skip to content

Commit 7d9b05b

Browse files
authored
Merge pull request #28 from sfcompute/improve-http-payload
Improve http payload
2 parents b57bb91 + 60e7523 commit 7d9b05b

11 files changed

Lines changed: 252 additions & 280 deletions

File tree

.github/workflows/release.yml

Lines changed: 98 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,56 @@
11
name: 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).
36
on:
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

916
permissions:
1017
contents: write
1118
packages: write
12-
issues: write
13-
pull-requests: write
1419

1520
env:
1621
CARGO_TERM_COLOR: always
1722
RUST_BACKTRACE: 1
1823

1924
jobs:
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

Comments
 (0)