diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3cfda458..73912713 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,9 @@ on: - 'source/cli/**' - 'MaaFramework/**' - 'assets/**' + - 'cmake/**' + - 'CMakelists.txt' + - 'CMakePresets.json' pull_request: branches: - '**' @@ -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/release-downloader@v1.8 + 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/release-downloader@v1.8 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/release-downloader@v1.8 + 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 diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000..53ca0aef --- /dev/null +++ b/CMakePresets.json @@ -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 + } + ] +} diff --git a/source/cli/main.cpp b/source/cli/main.cpp index 4606c59b..40cf0a1c 100644 --- a/source/cli/main.cpp +++ b/source/cli/main.cpp @@ -1,3 +1,4 @@ +#include #include #include #include