Beta37 #41
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Cross Compile Go Project | |
on: | |
pull_request: | |
types: [opened, synchronize] | |
push: | |
tags: | |
- '*' | |
jobs: | |
build-ubuntu: | |
name: Build on ${{ matrix.os }} for ${{ matrix.goarch }} | |
runs-on: ubuntu-latest #here | |
strategy: | |
matrix: | |
include: | |
- os: linux | |
goarch: amd64 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
- name: Set up Go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: '1.21.1' # Set to specific Go version. | |
- name: Install build dependencies (Ubuntu) | |
if: matrix.os == 'linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y build-essential libc6-dev libsqlite3-dev | |
- name: Create output directory | |
run: mkdir -p output | |
- name: Compile Go for target | |
env: | |
GOOS: ${{ matrix.os }} | |
GOARCH: ${{ matrix.goarch }} | |
CGO_ENABLED: 1 | |
run: | | |
if [ "$GOOS" = "windows" ]; then | |
go build -ldflags="-s -w" -o output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }}.exe | |
else | |
go build -ldflags="-s -w" -o output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }} | |
fi | |
shell: bash | |
- name: Compress executable files with UPX (except for gensokyo-android-arm64) | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y upx | |
if [[ "${{ matrix.os }}" == *"windows"* ]]; then | |
FILENAME="output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }}.exe" | |
else | |
FILENAME="output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }}" | |
fi | |
if [[ "${{ matrix.os }}" == "android" && "${{ matrix.goarch }}" == "arm64" ]]; then | |
echo "Skipping UPX compression for $FILENAME" | |
else | |
upx --best --lzma "$FILENAME" | |
fi | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
name: gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }} | |
path: output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }}${{ endsWith(matrix.os, 'windows') && '.exe' || '' }} | |
build-win: | |
name: Build on ${{ matrix.os }} for ${{ matrix.goarch }} | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
include: | |
- os: windows | |
goarch: amd64 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
- name: Set up Go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: '1.21.1' # Set to specific Go version. | |
- name: Install build dependencies (Windows) | |
if: matrix.os == 'windows' | |
run: | | |
choco install msys2 --params "/NoUpdate /InstallDir:C:\msys64" --no-progress -y | |
C:\msys64\usr\bin\bash -lc "pacman -Syu --noconfirm" | |
C:\msys64\usr\bin\bash -lc "pacman -S --noconfirm mingw-w64-x86_64-gcc mingw64/mingw-w64-x86_64-pkg-config mingw-w64-x86_64-cmake mingw-w64-x86_64-extra-cmake-modules mingw-w64-x86_64-toolchain" | |
echo "CGO_ENABLED=1" >> $GITHUB_ENV | |
echo "CC=x86_64-w64-mingw32-gcc" >> $GITHUB_ENV | |
echo "CXX=x86_64-w64-mingw32-g++" >> $GITHUB_ENV | |
- name: Create output directory | |
run: mkdir -p output | |
- name: Compile Go for target | |
env: | |
GOOS: ${{ matrix.os }} | |
GOARCH: ${{ matrix.goarch }} | |
CGO_ENABLED: 1 | |
run: | | |
if [ "$GOOS" = "windows" ]; then | |
go build -ldflags="-s -w" -o output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }}.exe | |
else | |
go build -ldflags="-s -w" -o output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }} | |
fi | |
shell: bash | |
- name: Setup UPX on Windows | |
run: | | |
Invoke-WebRequest -Uri "https://github.com/upx/upx/releases/download/v3.96/upx-3.96-win64.zip" -OutFile "upx.zip" | |
Expand-Archive -Path "upx.zip" -DestinationPath "${{ github.workspace }}" | |
echo "${{ github.workspace }}/upx-3.96-win64" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
shell: powershell | |
- name: Compress executable files with UPX (except for gensokyo-android-arm64) | |
run: | | |
if [[ "${{ matrix.os }}" == *"windows"* ]]; then | |
FILENAME="output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }}.exe" | |
else | |
FILENAME="output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }}" | |
fi | |
if [[ "${{ matrix.os }}" == "android" && "${{ matrix.goarch }}" == "arm64" ]]; then | |
echo "Skipping UPX compression for $FILENAME" | |
else | |
upx --best --lzma "$FILENAME" | |
fi | |
shell: bash | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
name: gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }} | |
path: output/gensokyo-llm-${{ matrix.os }}-${{ matrix.goarch }}${{ endsWith(matrix.os, 'windows') && '.exe' || '' }} | |
prepare_release: | |
needs: [build-ubuntu, build-win] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download all artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
path: output | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ github.ref_name }} | |
release_name: Release ${{ github.ref_name }} | |
draft: false | |
- name: Upload Release Assets | |
run: | | |
for dir in output/*; do | |
if [ -d "$dir" ]; then | |
for file in "$dir"/*; do | |
if [ -f "$file" ]; then | |
asset_name=$(basename "$file") | |
echo "Uploading ${asset_name}" | |
GITHUB_UPLOAD_URL=${{ steps.create_release.outputs.upload_url }} | |
GITHUB_UPLOAD_URL="${GITHUB_UPLOAD_URL%\{*}" | |
GITHUB_UPLOAD_URL="${GITHUB_UPLOAD_URL%\?*}" | |
curl \ | |
-X POST \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
-H "Content-Type: application/octet-stream" \ | |
--data-binary @"${file}" \ | |
"${GITHUB_UPLOAD_URL}?name=${asset_name}&label=${asset_name}" | |
else | |
echo "Expected a file in ${dir}, but found something else." | |
fi | |
done | |
else | |
echo "Expected ${dir} to be a directory." | |
fi | |
done |