Skip to content

Commit

Permalink
ci: 支持全平台CI
Browse files Browse the repository at this point in the history
  • Loading branch information
MistEO committed Sep 8, 2023
1 parent 053ea4f commit 9314e13
Show file tree
Hide file tree
Showing 3 changed files with 276 additions and 21 deletions.
193 changes: 172 additions & 21 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ on:
- 'source/cli/**'
- 'MaaFramework/**'
- 'assets/**'
- 'cmake/**'
- 'CMakelists.txt'
- 'CMakePresets.json'
pull_request:
branches:
- '**'
Expand All @@ -19,76 +22,224 @@ on:
- 'source/cli/**'
- 'MaaFramework/**'
- 'assets/**'
- 'cmake/**'
- 'CMakelists.txt'
- 'CMakePresets.json'
workflow_dispatch:

jobs:
meta:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.set_tag.outputs.tag }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- id: set_tag
run: |
echo tag=$(git describe --tags --match "v*" ${{ github.ref }} || git rev-parse --short HEAD) | tee -a $GITHUB_OUTPUT
is_release=${{ startsWith(github.ref, 'refs/tags/v') }}
tag=$(git describe --tags --match "v*" ${{ github.ref }} || true)
if [[ $tag != v* ]]; then
tag=$(curl -sX GET "https://api.github.com/repos/MaaAssistantArknights/MaaFramework/releases/latest" --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' | awk '/tag_name/{print $4}' FS='["]')
if [[ $tag != v* ]]; then
tag="v0.0.0"
fi
tag=$(date "+$tag-%y%m%d-$(git rev-parse --short HEAD)")
fi
if ! $($is_release) ; then
prefix=${tag%-*-*}
suffix=${tag#$prefix-}
tag="$prefix-ci.$suffix"
fi
echo tag=$tag | tee -a $GITHUB_OUTPUT
echo is_release=$is_release | tee -a $GITHUB_OUTPUT
outputs:
tag: ${{ steps.set_tag.outputs.tag }}
is_release: ${{ steps.set_tag.outputs.is_release }}

windows:
needs: meta
runs-on: windows-latest
strategy:
matrix:
include:
- msbuild_target: x64
lowercase_target: x64
runs-on: windows-latest
arch: [aarch64, x86_64]
fail-fast: false

steps:
- uses: actions/checkout@v3
with:
submodules: true

- name: Update resource version
run: |
python3 .github/update_resource_version.py assets/resource/properties.json ${{ needs.meta.outputs.tag }}
- name: Download MaaFramework
uses: robinraju/[email protected]
with:
repository: MaaAssistantArknights/MaaFramework
latest: true
fileName: "MAA-win-${{ matrix.arch }}*"
out-file-path: "deps"
extract: true

- name: Build MAA
run: |
cmake --preset "${{ matrix.arch == 'x86_64' && 'MSVC 2022' || 'MSVC 2022 ARM' }}" -DM9A_HASH_VERSION='${{ needs.meta.outputs.tag }}'
cmake --build build --preset "${{ matrix.arch == 'x86_64' && 'MSVC 2022' || 'MSVC 2022 ARM' }} - Release" -j 16
- name: Install
shell: bash
if: always()
run: |
cmake --install build --prefix install
- uses: actions/upload-artifact@v3
if: always()
with:
name: MAA-win-${{ matrix.arch }}
path: "install"


ubuntu:
needs: meta
runs-on: ubuntu-latest
container: archlinux:base-devel
strategy:
matrix:
arch: [aarch64, x86_64]
fail-fast: false

steps:
# maybe should explicitly update some pkg instead of all?
- name: Update system
run: |
pacman -Syu --noconfirm
- name: Install dep
run: |
pacman -Sy
pacman -S --noconfirm cmake python ccache ninja git
# https://github.com/MaaAssistantArknights/MaaFramework/actions/runs/5643408179/job/15285186255
- uses: actions/checkout@v3
with:
submodules: true

- name: Install cross compile toolchains
if: ${{ matrix.arch != 'x86_64' }}
run: |
pacman -Sy
pacman -S --noconfirm aarch64-linux-gnu-gcc
- name: Setup ccache
uses: Chocobo1/setup-ccache-action@v1
with:
remove_stale_cache: false

- name: Update resource version
run: |
python3 .github/update_resource_version.py assets/resource/properties.json ${{ needs.meta.outputs.tag }}
- name: Download MaaFramework
uses: robinraju/[email protected]
with:
repository: MaaAssistantArknights/MaaFramework
latest: true
fileName: "MAA-win-x86_64*"
out-file-path: "source/cli/${{ matrix.msbuild_target }}/Release"
fileName: "MAA-linux-${{ matrix.arch }}*"
out-file-path: "deps"
extract: true

- run: ls -l source/cli/${{ matrix.msbuild_target }}/Release
- name: Build MAA
env:
CC: ${{ matrix.arch == 'x86_64' && 'ccache gcc' || 'ccache aarch64-linux-gnu-gcc' }}
CXX: ${{ matrix.arch == 'x86_64' && 'ccache g++' || 'ccache aarch64-linux-gnu-g++' }}
run: |
cmake --preset 'NinjaMulti' \
-DM9A_HASH_VERSION='${{ needs.meta.outputs.tag }}'
cmake --build build --preset 'NinjaMulti - Release' -j 16
- name: Install
shell: bash
if: always()
run: |
cmake --install build --prefix install
- uses: actions/upload-artifact@v3
if: always()
with:
name: MAA-linux-${{ matrix.arch }}
path: "install"

macos:
needs: meta
runs-on: macos-latest
strategy:
matrix:
arch: [aarch64, x86_64]
fail-fast: false

steps:
- uses: actions/checkout@v3
with:
submodules: true

- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1
- name: Install dep
run: |
brew install cmake python ninja
# ccache?

- name: Install compiler
run: |
brew install llvm
# 16

- name: Update resource version
run: |
python3 .github/update_resource_version.py assets/resource/properties.json ${{ needs.meta.outputs.tag }}
- name: Download MaaFramework
uses: robinraju/[email protected]
with:
repository: MaaAssistantArknights/MaaFramework
latest: true
fileName: "MAA-macos-${{ matrix.arch }}*"
out-file-path: "deps"
extract: true

- name: Build MAA
env:
CC: "/usr/local/opt/llvm/bin/clang"
CXX: "/usr/local/opt/llvm/bin/clang++"
run: |
MSBUILD source/cli/MAA1999_CLI.sln /t:rebuild /p:Configuration="Release" /p:Platform="${{ matrix.msbuild_target }}" /m /p:MAA_VERSION="${{ needs.meta.outputs.tag }}"
cmake --preset 'NinjaMulti' \
-DM9A_HASH_VERSION='${{ needs.meta.outputs.tag }}'
cmake --build build --preset 'NinjaMulti - Release' -j 16
- name: Install
shell: bash
if: always()
run: |
cd source/cli/${{ matrix.msbuild_target }}/Release
mkdir -p install
cp -r docs include resource MaaAgentBinary *.exe *.dll install
cmake --install build --prefix install
- uses: actions/upload-artifact@v3
if: always()
with:
name: MAA1999-win-${{ matrix.msbuild_target }}
path: source/cli/${{ matrix.msbuild_target }}/Release/install
name: MAA-macos-${{ matrix.arch }}
path: "install"

release:
if: startsWith(github.ref, 'refs/tags/v')
needs: [meta, windows]
if: ${{ needs.meta.outputs.is_release == 'true' }}
needs: [meta, windows, ubuntu, macos]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
with:
path: assets

- run: |
cd assets
for f in *; do
Expand Down
103 changes: 103 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
{
"version": 5,
"cmakeMinimumRequired": {
"major": 3,
"minor": 21,
"patch": 0
},
"configurePresets": [
{
"name": "NinjaMulti",
"displayName": "Ninja MultiConfig",
"description": "Ninja MultiConfig",
"generator": "Ninja Multi-Config",
"binaryDir": "${sourceDir}/build"
},
{
"name": "MSVC 2022",
"displayName": "MSVC 2022",
"description": "MSVC 2022",
"generator": "Visual Studio 17 2022",
"binaryDir": "${sourceDir}/build",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "MSVC 2022 ARM",
"displayName": "MSVC 2022 ARM",
"description": "MSVC 2022 ARM",
"generator": "Visual Studio 17 2022",
"binaryDir": "${sourceDir}/build",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"architecture": {
"strategy": "set",
"value": "ARM64"
}
}
],
"buildPresets": [
{
"name": "NinjaMulti - Debug",
"displayName": "Ninja MultiConfig Debug",
"description": "Ninja MultiConfig Debug",
"configurePreset": "NinjaMulti",
"configuration": "Debug",
"jobs": 16
},
{
"name": "NinjaMulti - DebWithRelDeps",
"displayName": "Ninja MultiConfig DebWithRelDeps",
"description": "Ninja MultiConfig DebWithRelDeps",
"configurePreset": "NinjaMulti",
"configuration": "RelWithDebInfo",
"jobs": 16
},
{
"name": "NinjaMulti - Release",
"displayName": "Ninja MultiConfig Release",
"description": "Ninja MultiConfig Release",
"configurePreset": "NinjaMulti",
"configuration": "Release",
"jobs": 16
},
{
"name": "MSVC 2022 - Debug",
"displayName": "MSVC 2022 Debug",
"description": "MSVC 2022 Debug",
"configurePreset": "MSVC 2022",
"configuration": "Debug",
"jobs": 16
},
{
"name": "MSVC 2022 - DebWithRelDeps",
"displayName": "MSVC 2022 DebWithRelDeps",
"description": "MSVC 2022 DebWithRelDeps",
"configurePreset": "MSVC 2022",
"configuration": "DebWithRelDeps",
"jobs": 16
},
{
"name": "MSVC 2022 - Release",
"displayName": "MSVC 2022 Release",
"description": "MSVC 2022 Release",
"configurePreset": "MSVC 2022",
"configuration": "Release",
"jobs": 16
},
{
"name": "MSVC 2022 ARM - Release",
"displayName": "MSVC 2022 ARM Release",
"description": "MSVC 2022 ARM Release",
"configurePreset": "MSVC 2022 ARM",
"configuration": "Release",
"jobs": 16
}
]
}
1 change: 1 addition & 0 deletions source/cli/main.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include <cstdio>
#include <filesystem>
#include <fstream>
#include <iostream>
Expand Down

0 comments on commit 9314e13

Please sign in to comment.