Skip to content

fix: 修复 wait_all 死锁问题 #2068

fix: 修复 wait_all 死锁问题

fix: 修复 wait_all 死锁问题 #2068

Workflow file for this run

name: build
on:
push:
tags:
- 'v*'
branches:
- '**'
paths:
- '.github/workflows/build.yml'
- '3rdparty/**'
- 'cmake/**'
- 'include/**'
- 'source/**'
- 'CMakeLists.txt'
pull_request:
branches:
- '**'
paths:
- '.github/workflows/build.yml'
- '3rdparty/**'
- 'cmake/**'
- 'include/**'
- 'source/**'
- 'CMakeLists.txt'
workflow_dispatch:
jobs:
meta:
uses: ./.github/workflows/meta.yml
windows:
needs: meta
runs-on: windows-latest
strategy:
matrix:
arch: [aarch64, x86_64]
fail-fast: false
steps:
- name: Windows runner hack
shell: cmd
run: |
dir d:\a
cd ..
mkdir C:\MaaFramework
rmdir MaaFramework
mklink /j MaaFramework C:\MaaFramework
dism /Online /Disable-Feature /FeatureName:Windows-Defender /Remove /NoRestart /Quiet
cd .
- name: Windows runner hack (2)
uses: al-cheb/[email protected]
with:
minimum-size: 16GB
maximum-size: 16GB
disk-root: 'D:'
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup Windows 10 SDK
uses: GuillaumeFalourd/[email protected]
with:
sdk-version: 22621
- name: Bootstrap MaaDeps
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 tools/maadeps-download.py ${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-windows
- uses: pnpm/action-setup@v4
with:
version: latest
- name: Use Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Prepare node_modules
run: |
cd source/binding/NodeJS
pnpm i
cd -
- name: Build MAA
run: |
cmake --preset "${{ matrix.arch == 'x86_64' && 'MSVC 2022' || 'MSVC 2022 ARM' }}" -DCMAKE_SYSTEM_VERSION="10.0.22621.0" -DMAADEPS_TRIPLET="maa-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-windows" -DMAA_HASH_VERSION='${{ needs.meta.outputs.tag }}' -DBUILD_NODEJS_BINDING=ON
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
rm -rf install/bin/msvc-debug
cp -r docs install
cp README*.md install
cp -r sample install
cp -r LICENSE.md install
- uses: actions/upload-artifact@v4
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
- uses: pnpm/action-setup@v4
with:
version: latest
- name: Use Node
uses: actions/setup-node@v4
with:
node-version: 20
# https://github.com/MaaXYZ/MaaFramework/actions/runs/5643408179/job/15285186255
- uses: actions/checkout@v4
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: Bootstrap MaaDeps
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 tools/maadeps-download.py ${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-linux
- name: Prepare node_modules
run: |
cd source/binding/NodeJS
pnpm i
cd -
- name: Build MAA
env:
CC: ${{ matrix.arch == 'x86_64' && 'gcc' || 'aarch64-linux-gnu-gcc' }}
CXX: ${{ matrix.arch == 'x86_64' && 'g++' || 'aarch64-linux-gnu-g++' }}
run: |
cmake --preset 'NinjaMulti' \
-DMAADEPS_TRIPLET='maa-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-linux' \
-DMAA_HASH_VERSION='${{ needs.meta.outputs.tag }}' \
-DBUILD_NODEJS_BINDING=ON
cmake --build build --preset 'NinjaMulti - Release' -j 16
- name: Install
shell: bash
if: always()
run: |
cmake --install build --prefix install
cp -r docs install
cp README*.md install
cp -r sample install
cp -r LICENSE.md install
- uses: actions/upload-artifact@v4
if: always()
with:
name: MAA-linux-${{ matrix.arch }}
path: 'install'
macos:
needs: meta
strategy:
matrix:
include:
- os: macos-13
arch: x86_64
- os: macos-14
arch: aarch64
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install dep
run: |
brew install cmake ninja ccache
- name: Install compiler
run: |
brew install llvm
- name: Setup ccache
uses: Chocobo1/setup-ccache-action@v1
with:
remove_stale_cache: false
- name: Bootstrap MaaDeps
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 tools/maadeps-download.py ${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-osx
- uses: pnpm/action-setup@v4
with:
version: latest
- name: Use Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Prepare node_modules
run: |
cd source/binding/NodeJS
pnpm i
cd -
- name: Build MAA
run: |
LLVM_PREFIX=$(brew --prefix llvm)
cmake --preset 'NinjaMulti' \
-DMAADEPS_TRIPLET='maa-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-osx' \
-DMAA_HASH_VERSION='${{ needs.meta.outputs.tag }}' \
-DCMAKE_C_COMPILER=${LLVM_PREFIX}/bin/clang \
-DCMAKE_CXX_COMPILER=${LLVM_PREFIX}/bin/clang++ \
-DBUILD_NODEJS_BINDING=ON
cmake --build build --preset 'NinjaMulti - Release' -j 16
- name: Install
shell: bash
if: always()
run: |
cmake --install build --prefix install
cp -r docs install
cp README*.md install
cp -r sample install
cp -r LICENSE.md install
- uses: actions/upload-artifact@v4
if: always()
with:
name: MAA-macos-${{ matrix.arch }}
path: 'install'
android:
needs: meta
runs-on: ubuntu-latest
strategy:
matrix:
include:
- arch: x86_64
- arch: aarch64
fail-fast: false
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install Packages
run: |
sudo apt-get update -y
sudo apt-get install -y ninja-build python3-pyelftools elfutils patchelf nasm
- uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r27c
- name: Setup ccache
uses: Chocobo1/setup-ccache-action@v1
with:
remove_stale_cache: false
- name: Bootstrap MaaDeps
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 tools/maadeps-download.py ${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-android
- name: Build MAA
run: |
cmake --preset 'NinjaMulti' \
-DCMAKE_TOOLCHAIN_FILE=${{ steps.setup-ndk.outputs.ndk-path}}/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=${{ matrix.arch == 'x86_64' && 'x86_64' || 'arm64-v8a' }} \
-DANDROID_PLATFORM=android-23 \
-DMAADEPS_TRIPLET='maa-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-android' \
-DMAA_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
cp -r docs install
cp README*.md install
cp -r sample install
cp -r LICENSE.md install
- uses: actions/upload-artifact@v4
if: always()
with:
name: MAA-android-${{ matrix.arch }}
path: 'install'
nuget_pack:
needs: [meta, windows, ubuntu, macos, android]
runs-on: ubuntu-latest
steps:
- uses: nuget/setup-nuget@v2
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: assets
- name: Nuget Pack
working-directory: tools/nupkgs
run: |
wget https://raw.githubusercontent.com/MaaAssistantArknights/design/main/logo/maa-logo_128x128.png
version=${{ needs.meta.outputs.version }}
for NUSPEC in Maa.Framework.Runtime*.nuspec; do
cat Head.nuspec $NUSPEC Tail.nuspec > temp && mv temp $NUSPEC
nuget pack $NUSPEC \
-Verbosity detailed \
-Properties "version=${version//-post/};year=$(date +%Y);branch=$(git rev-parse --abbrev-ref HEAD);commit=$(git rev-parse HEAD);root_path=../.."
done
- uses: actions/upload-artifact@v4
if: always()
with:
name: MAA-nupkgs
path: 'tools/nupkgs/*.nupkg'
pip_pack:
needs: [meta, windows, ubuntu, macos, android]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: assets
- name: Pip Pack
working-directory: tools/pip_pack
run: |
tag=${{ needs.meta.outputs.tag }}
pip install --upgrade wheel build tomlkit
python pip_pack.py $tag
- uses: actions/upload-artifact@v4
if: always()
with:
name: MAA-pip-pkgs
path: 'tools/pip_pack/wheel/*.whl'
nodejs_pack:
needs: [meta, windows, ubuntu, macos, android]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: assets
- uses: pnpm/action-setup@v4
with:
version: latest
- name: Use Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Build wrapper
run: |
cd source/binding/NodeJS/release/maa-node
pnpm i
npm run build
- name: Package wrapper
run: |
ASSETS=`pwd`/assets
cd source/binding/NodeJS
pnpm i
npx tsx scripts/pack.ts $ASSETS ${{ needs.meta.outputs.tag }}
- uses: actions/upload-artifact@v4
with:
name: MAA-nodejs-package
path: 'source/binding/NodeJS/release'
release:
if: ${{ needs.meta.outputs.is_release == 'true' && github.repository_id == '632024122' }}
needs: [meta, windows, ubuntu, macos, android, nuget_pack, pip_pack, nodejs_pack]
runs-on: ubuntu-latest
env:
OUTPUT_PUBLISH_FAILED: 'echo "failed=true" >> $GITHUB_OUTPUT && echo "::error::Failed to publish packages"'
NUGET_PACKAGE_SOURCE: https://api.nuget.org/v3/index.json # https://apiint.nugettest.org/v3/index.json
steps:
- uses: actions/download-artifact@v4
with:
path: assets
- name: Publish Nupkgs
id: nuget
run: |
dotnet nuget push assets/MAA-nupkgs/*.nupkg \
--api-key ${{ secrets.NuGetAPIKey }} \
--source $NUGET_PACKAGE_SOURCE \
|| eval $OUTPUT_PUBLISH_FAILED
rm -r assets/MAA-nupkgs
- name: Publish Pip Packages
id: pip
run: |
pip install --upgrade twine
python -m twine upload \
assets/MAA-pip-pkgs/*.whl \
--username __token__\
--password ${{ secrets.PYPI_TOKEN }} \
|| eval $OUTPUT_PUBLISH_FAILED
rm -r assets/MAA-pip-pkgs
- uses: JS-DevTools/npm-publish@v3
id: nodejs
with:
package: assets/MAA-nodejs-package/maa-node
access: public
token: ${{ secrets.NPM_TOKEN }}
- uses: JS-DevTools/npm-publish@v3
with:
package: assets/MAA-nodejs-package/maa-node-win32-x64
access: public
token: ${{ secrets.NPM_TOKEN }}
- uses: JS-DevTools/npm-publish@v3
with:
package: assets/MAA-nodejs-package/maa-node-win32-arm64
access: public
token: ${{ secrets.NPM_TOKEN }}
- uses: JS-DevTools/npm-publish@v3
with:
package: assets/MAA-nodejs-package/maa-node-linux-x64
access: public
token: ${{ secrets.NPM_TOKEN }}
- uses: JS-DevTools/npm-publish@v3
with:
package: assets/MAA-nodejs-package/maa-node-linux-arm64
access: public
token: ${{ secrets.NPM_TOKEN }}
- uses: JS-DevTools/npm-publish@v3
with:
package: assets/MAA-nodejs-package/maa-node-darwin-x64
access: public
token: ${{ secrets.NPM_TOKEN }}
- uses: JS-DevTools/npm-publish@v3
with:
package: assets/MAA-nodejs-package/maa-node-darwin-arm64
access: public
token: ${{ secrets.NPM_TOKEN }}
- name: Remove NodeJS Release
run: |
rm -r assets/MAA-nodejs-package
- run: |
cd assets
for f in *; do
(cd $f && zip -r ../$f-${{ needs.meta.outputs.tag }}.zip .)
done
- uses: softprops/action-gh-release@v2
with:
files: assets/*.zip
tag_name: ${{ needs.meta.outputs.tag }}
prerelease: ${{ needs.meta.outputs.is_pre_release == 'true' }}
- name: Create issue if failed to publish packages
if: steps.nuget.outputs.failed || steps.pip.outputs.failed || steps.nodejs.outputs.failed
uses: actions-cool/issues-helper@v3
with:
actions: 'create-issue'
title: '${{ needs.meta.outputs.tag }} failed to publish packages'
body: |
Please manually publish the following packages:
${{ steps.nuget.outputs.failed && '- nuget @moomiji' || '' }}
${{ steps.pip.outputs.failed && '- pip @MistEO' || '' }}
${{ steps.nodejs.outputs.failed && '- nodejs @neko-para' || '' }}