mirror of
https://oauth2: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@github.com/m1ngsama/TNT.git
synced 2026-06-26 21:54:38 +08:00
release: harden binary artifact workflow
This commit is contained in:
parent
d819fd5324
commit
7da33951b0
3 changed files with 42 additions and 21 deletions
50
.github/workflows/release.yml
vendored
50
.github/workflows/release.yml
vendored
|
|
@ -12,16 +12,16 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-24.04
|
||||||
target: linux-amd64
|
target: linux-amd64
|
||||||
artifact: tnt-linux-amd64
|
artifact: tnt-linux-amd64
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-24.04-arm
|
||||||
target: linux-arm64
|
target: linux-arm64
|
||||||
artifact: tnt-linux-arm64
|
artifact: tnt-linux-arm64
|
||||||
- os: macos-latest
|
- os: macos-15-intel
|
||||||
target: darwin-amd64
|
target: darwin-amd64
|
||||||
artifact: tnt-darwin-amd64
|
artifact: tnt-darwin-amd64
|
||||||
- os: macos-latest
|
- os: macos-15
|
||||||
target: darwin-arm64
|
target: darwin-arm64
|
||||||
artifact: tnt-darwin-arm64
|
artifact: tnt-darwin-arm64
|
||||||
|
|
||||||
|
|
@ -34,20 +34,35 @@ jobs:
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y libssh-dev
|
sudo apt-get install -y libssh-dev
|
||||||
|
|
||||||
- name: Install cross-compilation tools (Ubuntu ARM64)
|
|
||||||
if: matrix.target == 'linux-arm64'
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y gcc-aarch64-linux-gnu
|
|
||||||
sudo dpkg --add-architecture arm64
|
|
||||||
|
|
||||||
- name: Install dependencies (macOS)
|
- name: Install dependencies (macOS)
|
||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
run: |
|
run: |
|
||||||
brew install libssh
|
brew install libssh
|
||||||
|
|
||||||
|
- name: Run release preflight
|
||||||
|
run: make release-check
|
||||||
|
|
||||||
- name: Build release binary
|
- name: Build release binary
|
||||||
run: make release
|
run: make release
|
||||||
|
|
||||||
|
- name: Verify artifact architecture
|
||||||
|
run: |
|
||||||
|
file tnt
|
||||||
|
case "${{ matrix.target }}" in
|
||||||
|
linux-amd64)
|
||||||
|
file tnt | grep -E 'ELF 64-bit.*x86-64'
|
||||||
|
;;
|
||||||
|
linux-arm64)
|
||||||
|
file tnt | grep -E 'ELF 64-bit.*(aarch64|ARM aarch64)'
|
||||||
|
;;
|
||||||
|
darwin-amd64)
|
||||||
|
file tnt | grep -E 'Mach-O 64-bit.*x86_64'
|
||||||
|
;;
|
||||||
|
darwin-arm64)
|
||||||
|
file tnt | grep -E 'Mach-O 64-bit.*arm64'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
- name: Rename binary
|
- name: Rename binary
|
||||||
run: mv tnt ${{ matrix.artifact }}
|
run: mv tnt ${{ matrix.artifact }}
|
||||||
|
|
||||||
|
|
@ -74,19 +89,18 @@ jobs:
|
||||||
- name: Create checksums
|
- name: Create checksums
|
||||||
run: |
|
run: |
|
||||||
cd artifacts
|
cd artifacts
|
||||||
for dir in */; do
|
: > checksums.txt
|
||||||
cd "$dir"
|
for artifact in */tnt-*; do
|
||||||
sha256sum * > checksums.txt
|
sha256sum "$artifact" | sed "s# $artifact# $(basename "$artifact")#" >> checksums.txt
|
||||||
cd ..
|
|
||||||
done
|
done
|
||||||
cd ..
|
cat checksums.txt
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
artifacts/*/tnt-*
|
artifacts/*/tnt-*
|
||||||
artifacts/*/checksums.txt
|
artifacts/checksums.txt
|
||||||
body: |
|
body: |
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|
@ -126,8 +140,8 @@ jobs:
|
||||||
```
|
```
|
||||||
|
|
||||||
## What's Changed
|
## What's Changed
|
||||||
See [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/CHANGELOG.md)
|
See [docs/CHANGELOG.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/docs/CHANGELOG.md)
|
||||||
draft: false
|
draft: true
|
||||||
prerelease: false
|
prerelease: false
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,9 @@
|
||||||
without tagging, publishing, or deploying.
|
without tagging, publishing, or deploying.
|
||||||
- CI now installs `expect` on Ubuntu so interactive integration tests run
|
- CI now installs `expect` on Ubuntu so interactive integration tests run
|
||||||
instead of being skipped, and runs `make release-check` on every push/PR.
|
instead of being skipped, and runs `make release-check` on every push/PR.
|
||||||
|
- The tag-triggered release workflow now builds on native x64/arm64 runners,
|
||||||
|
verifies artifact architecture, emits one checksum file, and creates a draft
|
||||||
|
release for manual review instead of publishing immediately.
|
||||||
|
|
||||||
## 2026-05-18 - Interactive input polish
|
## 2026-05-18 - Interactive input polish
|
||||||
|
|
||||||
|
|
|
||||||
10
docs/CICD.md
10
docs/CICD.md
|
|
@ -37,11 +37,15 @@ CREATING RELEASES
|
||||||
|
|
||||||
5. GitHub Actions automatically:
|
5. GitHub Actions automatically:
|
||||||
- Builds binaries (Linux/macOS, AMD64/ARM64)
|
- Builds binaries (Linux/macOS, AMD64/ARM64)
|
||||||
- Creates release
|
- Creates a draft release
|
||||||
- Uploads binaries
|
- Uploads binaries
|
||||||
- Generates checksums
|
- Generates one `checksums.txt` file
|
||||||
|
- Verifies that artifact architecture matches the asset name
|
||||||
|
|
||||||
6. Release appears at:
|
6. Review the draft release, smoke-test downloaded assets, then publish it
|
||||||
|
manually from GitHub.
|
||||||
|
|
||||||
|
7. Release appears at:
|
||||||
https://github.com/m1ngsama/TNT/releases
|
https://github.com/m1ngsama/TNT/releases
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue