mirror of
https://github.com/metabarcoding/obitools4.git
synced 2026-03-25 13:30:52 +00:00
Add cross-platform binary builds and release workflow improvements
This commit introduces a new build job that compiles binaries for multiple platforms (Linux, macOS) and architectures (amd64, arm64). It also refactors the release process to download pre-built artifacts and simplify the release directory preparation. The workflow now uses matrix strategy for building binaries and downloads all artifacts for the final release, removing the previous manual build steps for each platform.
This commit is contained in:
145
.github/workflows/release.yml
vendored
145
.github/workflows/release.yml
vendored
@@ -22,15 +22,35 @@ jobs:
|
|||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: make githubtests
|
run: make githubtests
|
||||||
|
|
||||||
# Then create release only if tests pass
|
# Build binaries for each platform
|
||||||
create-release:
|
build:
|
||||||
needs: test
|
needs: test
|
||||||
runs-on: ubuntu-latest
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: ubuntu-latest
|
||||||
|
goos: linux
|
||||||
|
goarch: amd64
|
||||||
|
output_name: linux_amd64
|
||||||
|
- os: ubuntu-latest
|
||||||
|
goos: linux
|
||||||
|
goarch: arm64
|
||||||
|
output_name: linux_arm64
|
||||||
|
cross_compile: true
|
||||||
|
- os: macos-latest
|
||||||
|
goos: darwin
|
||||||
|
goarch: amd64
|
||||||
|
output_name: darwin_amd64
|
||||||
|
- os: macos-latest
|
||||||
|
goos: darwin
|
||||||
|
goarch: arm64
|
||||||
|
output_name: darwin_arm64
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Setup Go
|
- name: Setup Go
|
||||||
uses: actions/setup-go@v5
|
uses: actions/setup-go@v5
|
||||||
@@ -42,77 +62,61 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
TAG=${GITHUB_REF#refs/tags/Release_}
|
TAG=${GITHUB_REF#refs/tags/Release_}
|
||||||
echo "version=$TAG" >> $GITHUB_OUTPUT
|
echo "version=$TAG" >> $GITHUB_OUTPUT
|
||||||
echo "tag_name=Release_$TAG" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build binaries for multiple platforms
|
- name: Install cross-compilation tools (Linux ARM64 only)
|
||||||
|
if: matrix.cross_compile
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y gcc-aarch64-linux-gnu
|
||||||
|
|
||||||
|
- name: Build binaries
|
||||||
env:
|
env:
|
||||||
|
GOOS: ${{ matrix.goos }}
|
||||||
|
GOARCH: ${{ matrix.goarch }}
|
||||||
|
CC: ${{ matrix.cross_compile && 'aarch64-linux-gnu-gcc' || '' }}
|
||||||
VERSION: ${{ steps.get_version.outputs.version }}
|
VERSION: ${{ steps.get_version.outputs.version }}
|
||||||
|
run: |
|
||||||
|
make obitools
|
||||||
|
mkdir -p artifacts
|
||||||
|
cd build
|
||||||
|
for binary in *; do
|
||||||
|
tar -czf ../artifacts/${binary}_${VERSION}_${{ matrix.output_name }}.tar.gz ${binary}
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: binaries-${{ matrix.output_name }}
|
||||||
|
path: artifacts/*
|
||||||
|
|
||||||
|
# Create the release
|
||||||
|
create-release:
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Extract version from tag
|
||||||
|
id: get_version
|
||||||
|
run: |
|
||||||
|
TAG=${GITHUB_REF#refs/tags/Release_}
|
||||||
|
echo "version=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Download all artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
path: release-artifacts
|
||||||
|
|
||||||
|
- name: Prepare release directory
|
||||||
run: |
|
run: |
|
||||||
mkdir -p release
|
mkdir -p release
|
||||||
|
find release-artifacts -type f -name "*.tar.gz" -exec cp {} release/ \;
|
||||||
# Build for Linux AMD64
|
|
||||||
echo "Building for Linux AMD64..."
|
|
||||||
GOOS=linux GOARCH=amd64 make obitools
|
|
||||||
cd build
|
|
||||||
for binary in *; do
|
|
||||||
tar -czf ../release/${binary}_${VERSION}_linux_amd64.tar.gz ${binary}
|
|
||||||
done
|
|
||||||
cd ..
|
|
||||||
rm -rf build
|
|
||||||
|
|
||||||
|
|
||||||
# Build for Linux ARM64
|
|
||||||
echo "Building for Linux ARM64..."
|
|
||||||
GOOS=linux GOARCH=arm64 make obitools
|
|
||||||
cd build
|
|
||||||
for binary in *; do
|
|
||||||
tar -czf ../release/${binary}_${VERSION}_linux_arm64.tar.gz ${binary}
|
|
||||||
done
|
|
||||||
cd ..
|
|
||||||
rm -rf build
|
|
||||||
|
|
||||||
|
|
||||||
# Build for macOS AMD64 (Intel)
|
|
||||||
echo "Building for macOS AMD64..."
|
|
||||||
GOOS=darwin GOARCH=amd64 make obitools
|
|
||||||
cd build
|
|
||||||
for binary in *; do
|
|
||||||
tar -czf ../release/${binary}_${VERSION}_darwin_amd64.tar.gz ${binary}
|
|
||||||
done
|
|
||||||
cd ..
|
|
||||||
rm -rf build
|
|
||||||
|
|
||||||
|
|
||||||
# Build for macOS ARM64 (Apple Silicon)
|
|
||||||
echo "Building for macOS ARM64..."
|
|
||||||
GOOS=darwin GOARCH=arm64 make obitools
|
|
||||||
cd build
|
|
||||||
for binary in *; do
|
|
||||||
tar -czf ../release/${binary}_${VERSION}_darwin_arm64.tar.gz ${binary}
|
|
||||||
done
|
|
||||||
cd ..
|
|
||||||
rm -rf build
|
|
||||||
|
|
||||||
|
|
||||||
# Build for Windows AMD64
|
|
||||||
echo "Building for Windows AMD64..."
|
|
||||||
GOOS=windows GOARCH=amd64 make obitools
|
|
||||||
cd build
|
|
||||||
for binary in *; do
|
|
||||||
# Windows binaries have .exe extension
|
|
||||||
if [ -f "${binary}.exe" ]; then
|
|
||||||
zip ../release/${binary}_${VERSION}_windows_amd64.zip ${binary}.exe
|
|
||||||
else
|
|
||||||
zip ../release/${binary}_${VERSION}_windows_amd64.zip ${binary}
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
echo "Built archives:"
|
|
||||||
ls -lh release/
|
ls -lh release/
|
||||||
|
|
||||||
- name: Generate Release Notes
|
- name: Generate Release Notes
|
||||||
id: release_notes
|
|
||||||
env:
|
env:
|
||||||
VERSION: ${{ steps.get_version.outputs.version }}
|
VERSION: ${{ steps.get_version.outputs.version }}
|
||||||
run: |
|
run: |
|
||||||
@@ -157,11 +161,6 @@ jobs:
|
|||||||
echo "tar -xzf <tool>_${VERSION}_darwin_arm64.tar.gz" >> release_notes.md
|
echo "tar -xzf <tool>_${VERSION}_darwin_arm64.tar.gz" >> release_notes.md
|
||||||
echo '```' >> release_notes.md
|
echo '```' >> release_notes.md
|
||||||
echo "" >> release_notes.md
|
echo "" >> release_notes.md
|
||||||
echo "### Windows (AMD64)" >> release_notes.md
|
|
||||||
echo '```powershell' >> release_notes.md
|
|
||||||
echo "Expand-Archive <tool>_${VERSION}_windows_amd64.zip" >> release_notes.md
|
|
||||||
echo '```' >> release_notes.md
|
|
||||||
echo "" >> release_notes.md
|
|
||||||
echo "Available tools: Replace \`<tool>\` with one of the obitools commands." >> release_notes.md
|
echo "Available tools: Replace \`<tool>\` with one of the obitools commands." >> release_notes.md
|
||||||
|
|
||||||
- name: Create GitHub Release
|
- name: Create GitHub Release
|
||||||
|
|||||||
Reference in New Issue
Block a user