Skip to content

Nekoray build matrix - cmake #33

Nekoray build matrix - cmake

Nekoray build matrix - cmake #33

name: Nekoray build matrix - cmake
on:
workflow_dispatch:
inputs:
tag:
description: 'Release Tag'
required: true
publish:
description: 'Publish: If want ignore'
required: false
artifact-pack:
description: 'artifact-pack: If want ignore'
required: false
jobs:
build-go:
strategy:
matrix:
cross_os: [ windows, linux, darwin ]
cross_arch: [ amd64, arm64 ]
include:
- cross_os: public_res
cross_arch: public_res
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Checking out sources
uses: actions/[email protected]
- name: Go Status
run: git ls-files go | xargs cat | sha1sum > go_status
- name: Cache Common Download
id: cache-common
uses: actions/[email protected]
with:
path: artifacts.tgz
key: CommonCache-${{ matrix.cross_os }}-${{ matrix.cross_arch }}-${{ hashFiles('script/*.sh', 'go_status', '*.txt') }}
- name: Install Golang
if: steps.cache-common.outputs.cache-hit != 'true' && matrix.cross_os != 'windows7'
uses: actions/[email protected]
with:
go-version: '1.23.3'
- name: Build golang parts
if: steps.cache-common.outputs.cache-hit != 'true'
shell: bash
run: |
[ ${{ matrix.cross_os }} == public_res ] || GOOS=${{ matrix.cross_os }} GOARCH=${{ matrix.cross_arch }} ./script/build_go.sh
[ ${{ matrix.cross_os }} == public_res ] || exit 0
./script/build_public_res.sh
- name: Tar files
if: steps.cache-common.outputs.cache-hit != 'true'
run: tar czvf artifacts.tgz ./deployment
- name: Uploading Artifact
uses: actions/[email protected]
with:
name: NekoRay-${{ github.sha }}-Common-${{ matrix.cross_os }}-${{ matrix.cross_arch }}
path: artifacts.tgz
build-cpp:
needs:
- build-go
strategy:
matrix:
include:
- platform: windows-latest
qt_version: "6.8.1"
target: amd64
- platform: ubuntu-latest
qt_version: "6.8.1"
target: amd64
- platform: macos-latest
qt_version: "6.8.1"
target: x86_64
- platform: macos-latest
qt_version: "6.8.1"
target: arm64
fail-fast: false
runs-on: ${{ matrix.platform }}
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
steps:
- name: Checking out sources
uses: actions/[email protected]
with:
submodules: "recursive"
# - name: Install MSVC compiler
# if: matrix.platform == 'windows-latest'
# uses: ilammy/[email protected]
- name: Download Artifacts
uses: actions/[email protected]
with:
path: download-artifact
# ========================================================================================================= Qt Install
- name: Install Qt
uses: jurplel/[email protected]
with:
version: ${{ matrix.qt_version }}
setup-python: true
cache: true
cache-key-prefix: QtCache-${{ matrix.platform }}-${{ matrix.target }}
# ========================================================================================================= 编译与 Qt 无关的依赖
- name: Install ninja-build tool
uses: seanmiddleditch/gha-setup-ninja@v5
- name: Cache Download
id: cache-deps
uses: actions/[email protected]
with:
path: libs/deps
key: DepsCache-${{ matrix.platform }}-${{ matrix.target }}-${{ hashFiles('script/build_deps_*.sh') }}-Qt${{ matrix.qt_version }}
- name: Build Dependencies
shell: bash
if: steps.cache-deps.outputs.cache-hit != 'true'
run: ./script/build_deps_all.sh ${{ matrix.target }}
# ========================================================================================================= Generate MakeFile and Build
- name: Windows - Generate MakeFile and Build
shell: bash
if: matrix.platform == 'windows-latest'
# env:
# CC: cl.exe
# CXX: cl.exe
run: |
mkdir build
cd build
cmake -GNinja -DQT_VERSION_MAJOR=6 -DCMAKE_BUILD_TYPE=Release ..
ninja -j2
cd ..
./script/deploy_windows64.sh
- name: Linux - Generate MakeFile and Build
shell: bash
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt update && sudo apt upgrade -y
mkdir build
pushd build
cmake -GNinja -DQT_VERSION_MAJOR=6 -DCMAKE_BUILD_TYPE=Release ..
ninja
popd
./script/deploy_linux64.sh
- name: macOS - Generate MakeFile and Build
shell: bash
if: matrix.platform == 'macos-latest'
run: |
mkdir build
cd build
cmake -GNinja -DQT_VERSION_MAJOR=6 -DCMAKE_BUILD_TYPE=Release -DNKR_PACKAGE_MACOS=1 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=${{ matrix.target }} ..
ninja
cd ..
./script/deploy_macos.sh ${{ matrix.target }}
# ========================================================================================================= Deployments
- name: Tar files
shell: bash
run: tar czvf artifacts.tgz ./deployment
- name: Uploading Artifact
uses: actions/[email protected]
with:
name: NekoRay-${{ github.sha }}-${{ matrix.platform }}-${{ matrix.target }}-Qt${{ matrix.qt_version }}
path: artifacts.tgz
publish:
name: Pack & Publish Release
if: github.event.inputs.artifact-pack != 'y'
runs-on: ubuntu-latest
needs:
- build-cpp
steps:
- name: Checking out sources
uses: actions/[email protected]
- name: Download Artifacts
uses: actions/[email protected]
with:
path: download-artifact
- name: Pack
run: |
curl -Lo - https://github.com/tcnksm/ghr/releases/download/v0.16.2/ghr_v0.16.2_linux_amd64.tar.gz | tar xzv
mv ghr*linux_amd64/ghr .
source script/env_deploy.sh
find . -name artifacts.tgz | xargs -n1 tar xvzf
cd deployment
rm -rf *.pdb
####
bash ../script/pack_debian.sh ${{ github.event.inputs.tag }}
mv nekoray.deb $version_standalone-debian-x64.deb
rm -rf nekoray
####
mv linux64 nekoray
zip -r $version_standalone-linux64.zip nekoray
rm -rf nekoray
####
mv windows64 nekoray
zip -r $version_standalone-windows64.zip nekoray
rm -rf nekoray
####
mkdir Nekoray
mv macos-arm64/nekoray.app Nekoray/nekoray.app
zip --symlinks -r $version_standalone-macos-arm64.zip Nekoray
rm -rf macos-arm64
rm -rf Nekoray
####
mkdir Nekoray
mv macos-amd64/nekoray.app Nekoray/nekoray.app
zip --symlinks -r $version_standalone-macos-amd64.zip Nekoray
rm -rf macos-amd64
rm -rf Nekoray
- name: Clean Up
run: |
cd deployment
rm -rf windows-arm64
rm -rf linux-arm64
rm -rf linux64
rm -rf windows64
rm -rf macos-amd64
rm -rf macos-arm64
rm -rf public_res
rm -rf *.pdb
- name: Uploading Artifact
uses: actions/[email protected]
with:
name: Deployment-${{ github.sha }}
path: deployment
- name: PreRelease
if: github.event.inputs.publish == 'p'
run: |
./ghr -prerelease -delete -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" "${{ github.event.inputs.tag }}" deployment
- name: Release
if: github.event.inputs.publish == ''
run: |
./ghr -delete -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" "${{ github.event.inputs.tag }}" deployment