Skip to content

build: Add version and SHA #36

build: Add version and SHA

build: Add version and SHA #36

name: Release binaries
on:
# workflow_run:
# workflows:
# - Build darwin-amd64 binary (no gpu)
# - Build darwin-arm64 binary (no gpu)
# - Build linux-amd64 binary (GPU)
# - Build linux-arm64 binary (GPU)
# types:
# - completed
push:
branches:
- gorka/ci-trigger-release
jobs:
version-sha:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determine Version and SHA
id: determine
run: |
VERSION=$(git describe --tags --abbrev=0)
SHA=$(git rev-parse HEAD)
echo VERSION: $VERSION
echo SHA: $SHA
echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
echo "SHA=${SHA}" >> "$GITHUB_OUTPUT"
outputs:
version: ${{ steps.determine.outputs.VERSION }}
sha: ${{ steps.determine.outputs.SHA }}
build_linux_arm64:
needs: version-sha
runs-on: linux-arm64
env:
VERSION: ${{ needs.version-sha.outputs.version }}
SHA: ${{ needs.version-sha.outputs.sha }}
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: "1.22"
- name: Add NVIDIA package repository
run: |
sudo apt-get install -y gnupg2 curl
sudo mkdir -p /usr/share/keyrings
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/3bf863cc.pub | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-drivers.gpg
echo "deb [signed-by=/usr/share/keyrings/nvidia-drivers.gpg] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/ /" | sudo tee /etc/apt/sources.list.d/nvidia-drivers.list
- name: Update package lists
run: sudo apt-get update || true # Ignore errors from this command
- name: Install NVIDIA CUDA Toolkit
run: |
sudo apt-get install -y nvidia-cuda-toolkit
export PATH=/usr/local/cuda/bin:$PATH
- name: Build for linux/arm64
env:
GOOS: linux
GOARCH: arm64
CGO_ENABLED: 1
CUDA_HOME: /usr/local/cuda
LD_LIBRARY_PATH: /usr/local/cuda/lib64:$LD_LIBRARY_PATH
run: |
echo "-------------- OS: ${GOOS} : Arch: ${GOARCH} ---------- start"
output_dir="build/${GOOS}-${GOARCH}"
output_name="lilypad-${GOOS}-${GOARCH}"
mkdir -p "${output_dir}"
# Debug: Print environment variables for the build
echo "Building for ${GOOS}/${GOARCH} with GOOS=$GOOS, GOARCH=$GOARCH"
echo "CUDA_HOME: $CUDA_HOME"
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
go build -o "${output_dir}/${output_name}" -v -tags cuda -ldflags="-X 'github.com/lilypad-tech/lilypad/cmd/lilypad.VERSION=$VERSION' -X 'github.com/lilypad-tech/lilypad/cmd/lilypad.COMMIT_SHA=$SHA'"
echo "-------------- OS: ${GOOS} : Arch: ${GOARCH} ---------- done"
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: linux-arm64-binary
path: build/linux-arm64/lilypad-linux-arm64
- name: Verify Build Output
run: |
ls -la build/linux-arm64
echo "Build complete"
build_linux_amd64:
needs: version-sha
runs-on: ubuntu-latest
env:
VERSION: ${{ needs.version-sha.outputs.version }}
SHA: ${{ needs.version-sha.outputs.sha }}
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: "1.22"
- name: Add NVIDIA package repository
run: |
sudo apt-get install -y gnupg2 curl
sudo mkdir -p /usr/share/keyrings
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/3bf863cc.pub | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-drivers.gpg
echo "deb [signed-by=/usr/share/keyrings/nvidia-drivers.gpg] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/ /" | sudo tee /etc/apt/sources.list.d/nvidia-drivers.list
- name: Update package lists
run: sudo apt-get update || true # Ignore errors from this command
- name: Install NVIDIA CUDA Toolkit
run: |
sudo apt-get install -y nvidia-cuda-toolkit
export PATH=/usr/local/cuda/bin:$PATH
- name: Build for linux/amd64
env:
GOOS: linux
GOARCH: amd64
CGO_ENABLED: 1
CUDA_HOME: /usr/local/cuda
LD_LIBRARY_PATH: /usr/local/cuda/lib64:$LD_LIBRARY_PATH
run: |
echo "-------------- OS: ${GOOS} : Arch: ${GOARCH} ---------- start"
output_dir="build/${GOOS}-${GOARCH}"
output_name="lilypad-${GOOS}-${GOARCH}"
mkdir -p "${output_dir}"
# Debug: Print environment variables for the build
echo "Building for ${GOOS}/${GOARCH} with GOOS=$GOOS, GOARCH=$GOARCH"
echo "CUDA_HOME: $CUDA_HOME"
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
go build -o "${output_dir}/${output_name}" -v -tags cuda -ldflags="-X 'github.com/lilypad-tech/lilypad/cmd/lilypad.VERSION=$VERSION' -X 'github.com/lilypad-tech/lilypad/cmd/lilypad.COMMIT_SHA=$SHA'"
echo "-------------- OS: ${GOOS} : Arch: ${GOARCH} ---------- done"
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: linux-amd64-binary
path: build/linux-amd64/lilypad-linux-amd64
- name: Verify Build Output
run: |
ls -la build/linux-amd64
echo "Build complete"
build_darwin_arm64:
needs: version-sha
runs-on: macos-latest #uses M1
env:
VERSION: ${{ needs.version-sha.outputs.version }}
SHA: ${{ needs.version-sha.outputs.sha }}
steps:
- uses: actions/checkout@v4
- name: Show Version and SHA
run: |
echo VERSION: $VERSION
echo SHA: $SHA
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: "1.22"
- name: Check architecture
run: uname -m
- name: Build for darwin/arm64
env:
GOOS: darwin
GOARCH: arm64
CGO_ENABLED: 1
run: |
echo "-------------- OS: ${GOOS} : Arch: ${GOARCH} ---------- start"
output_dir="build/${GOOS}-${GOARCH}"
output_name="lilypad-${GOOS}-${GOARCH}"
mkdir -p "${output_dir}"
# Debug: Print environment variables for the build
echo "Building for ${GOOS}/${GOARCH} with GOOS=$GOOS, GOARCH=$GOARCH"
echo "excluding CUDA. specify 'cuda' build tag to include it."
#
go build -o "${output_dir}/${output_name}" -v -ldflags="-X 'github.com/lilypad-tech/lilypad/cmd/lilypad.VERSION=$VERSION' -X 'github.com/lilypad-tech/lilypad/cmd/lilypad.COMMIT_SHA=$SHA'"
echo "-------------- OS: ${GOOS} : Arch: ${GOARCH} ---------- done"
./build/darwin-arm64/lilypad-darwin-arm64 version
- name: Preview before upload
run: |
ls -la .
ls -la build
ls -la /tmp
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: darwin-arm64-binary
path: build/darwin-arm64/lilypad-darwin-arm64
- name: Verify Build Output
run: |
ls -la build/darwin-arm64
echo "Build complete"
build_darwin_amd64:
needs: version-sha
runs-on: macos-13 #uses amd64
env:
VERSION: ${{ needs.version-sha.outputs.version }}
SHA: ${{ needs.version-sha.outputs.sha }}
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: "1.22"
- name: Check architecture
run: uname -m
- name: Build for darwin/amd64
env:
GOOS: darwin
GOARCH: amd64
CGO_ENABLED: 1
run: |
echo "-------------- OS: ${GOOS} : Arch: ${GOARCH} ---------- start"
output_dir="build/${GOOS}-${GOARCH}"
output_name="lilypad-${GOOS}-${GOARCH}"
mkdir -p "${output_dir}"
# Debug: Print environment variables for the build
echo "Building for ${GOOS}/${GOARCH} with GOOS=$GOOS, GOARCH=$GOARCH"
echo "excluding CUDA. specify 'cuda' build tag to include it."
go build -o "${output_dir}/${output_name}" -v -ldflags="-X 'github.com/lilypad-tech/lilypad/cmd/lilypad.VERSION=$VERSION' -X 'github.com/lilypad-tech/lilypad/cmd/lilypad.COMMIT_SHA=$SHA'"
echo "-------------- OS: ${GOOS} : Arch: ${GOARCH} ---------- done"
./build/darwin-amd64/lilypad-darwin-amd64 version
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: darwin-amd64-binary
path: build/darwin-amd64/lilypad-darwin-amd64
- name: Verify Build Output
run: |
ls -la build/darwin-amd64
echo "Build complete"
release:
needs:
[
build_darwin_amd64,
build_darwin_arm64,
build_linux_amd64,
build_linux_arm64,
]
# if: ${{ github.event.workflow_run.head_branch == 'main' }} # Only run this job on the main branch
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Git
run: |
git fetch --tags
SHORTSHA=$(git rev-parse --short HEAD)
echo "SHORTSHA=${SHORTSHA}" >> $GITHUB_ENV
- name: Download linux-amd64 binary
uses: actions/download-artifact@v3
with:
name: linux-amd64-binary
path: ./
- name: Download linux-arm64 binary
uses: actions/download-artifact@v3
with:
name: linux-arm64-binary
path: ./
- name: Download darwin-amd64 binary
uses: actions/download-artifact@v3
with:
name: darwin-amd64-binary
path: ./
- name: Download darwin-arm64 binary
uses: actions/download-artifact@v4
with:
name: darwin-arm64-binary
path: ./
- name: Upload Release Asset - darwin-arm64
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: |
lilypad-darwin-arm64
lilypad-darwin-amd64
lilypad-linux-arm64
lilypad-linux-amd64
tag_name: v2.0.0-${{ env.SHORTSHA }}
release_name: "Release v2.0.0-${{ env.SHORTSHA }}"
body: "Release v2.0.0-${{ env.SHORTSHA }}"
draft: false
prerelease: false