Release v4.16.0-rc.1 (#4566)

This commit is contained in:
MistEO
2023-04-30 23:13:57 +08:00
committed by GitHub
26 changed files with 242 additions and 346 deletions

View File

@@ -6,9 +6,23 @@ on:
- 'v*'
branches-ignore:
- 'master'
paths:
- '3rdparty/include/**'
- 'include/**'
- 'src/**'
- 'cmake/**'
- 'CMakeLists.txt'
- 'MAA.sln'
pull_request:
branches:
- 'dev'
paths:
- '3rdparty/include/**'
- 'include/**'
- 'src/**'
- 'cmake/**'
- 'CMakeLists.txt'
- 'MAA.sln'
workflow_dispatch:
jobs:

View File

@@ -1,68 +0,0 @@
name: dev-build-linux
on:
push:
branches-ignore:
- master
paths:
- 'src/MaaCore/**'
- '3rdparty/**'
- 'include/**'
- 'resource/**'
- 'cmake/**'
- CMakeLists.txt
pull_request:
branches:
- dev
paths:
- 'src/MaaCore/**'
- '3rdparty/**'
- 'include/**'
- 'resource/**'
- 'cmake/**'
- CMakeLists.txt
jobs:
linux-latest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- 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 maadeps-download.py
- name: Build MAA
env:
CC: ccache gcc-12
CXX: ccache g++-12
run: |
mkdir -p build
cmake -B build \
-DINSTALL_THIRD_LIBS=ON \
-DINSTALL_RESOURCE=OFF \
-DINSTALL_PYTHON=OFF
# -DFASTDEPLOY_DIRECTORY=~/fastdeploy \
# -DOPENCV_DIRECTORY=~/opencv/lib/cmake/opencv4 \
cmake --build build --parallel $(nproc --all)
mkdir -p install
cmake --install build --prefix install
- name: tar files
run: |
mkdir -p release
cd install
tar czvf $GITHUB_WORKSPACE/release/MaaAssistantArknights.tar.gz .
- uses: actions/upload-artifact@v3
with:
name: MAA-linux
path: release/*.tar.gz

View File

@@ -1,60 +0,0 @@
name: dev-build-mac
on:
push:
branches-ignore:
- master
paths:
- 'src/MaaCore/**'
- 'src/MaaMacGui/**'
- '3rdparty/**'
- 'include/**'
- 'resource/**'
- 'cmake/**'
- CMakeLists.txt
pull_request:
branches:
- dev
paths:
- 'src/MaaCore/**'
- 'src/MaaMacGui/**'
- '3rdparty/**'
- 'include/**'
- 'resource/**'
- 'cmake/**'
- CMakeLists.txt
jobs:
macos-latest:
runs-on: macos-12
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 100
- name: Cache Homebrew
uses: actions/cache@v3
with:
path: $(brew --prefix)
key: ${{ runner.os }}-homebrew-${{ hashFiles('.config/brew/Brewfile') }}
- name: Install Dependencies
run: |
brew update --preinstall
brew install ninja pkg-config range-v3
- name: Bootstrap MaaDeps
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 maadeps-download.py
- name: Configure MaaCore
run: |
cmake -B build -GNinja -DBUILD_XCFRAMEWORK=ON -DCMAKE_OSX_ARCHITECTURES=x86_64
- name: Build libMaaCore
run: cmake --build build
- name: Build MAA
working-directory: src/MaaMacGui
run: xcodebuild CODE_SIGN_IDENTITY="-" DEVELOPMENT_TEAM="-" -derivedDataPath DerivedData -project MeoAsstMac.xcodeproj -scheme MAA
- uses: actions/upload-artifact@v3
with:
name: MAA-macos
path: src/MaaMacGui/DerivedData/Build/Products/Debug

View File

@@ -1,91 +0,0 @@
# ------------------------------------------------------------------------------
# <auto-generated>
#
# This code was generated.
#
# - To turn off auto-generation set:
#
# [GitHubActions (AutoGenerate = false)]
#
# - To trigger manual generation invoke:
#
# nuke --generate-configuration GitHubActions_dev-build-win --host GitHubActions
#
# </auto-generated>
# ------------------------------------------------------------------------------
name: dev-build-win
on:
push:
branches-ignore:
- master
paths:
- 'src/MaaCore/**'
- 'src/MaaWpfGui/**'
- '3rdparty/**'
- 'tools/MaaBuilder/**'
- tools/MaaBuilder.sln
- 'include/**'
- 'resource/**'
- MAA.sln
pull_request:
branches:
- dev
paths:
- 'src/MaaCore/**'
- 'src/MaaWpfGui/**'
- '3rdparty/**'
- 'tools/MaaBuilder/**'
- tools/MaaBuilder.sln
- 'include/**'
- 'resource/**'
- MAA.sln
workflow_dispatch:
inputs:
Reason:
description: "Reason"
required: true
ReleaseSimulation:
description: "Release Simulation"
required: true
jobs:
windows-latest:
strategy:
matrix:
include:
- msbuild_target: x64
lowercase_target: x64
- msbuild_target: ARM64
lowercase_target: arm64
fail-fast: false
env:
MAABUILDER_TARGET_PLATFORM: ${{ matrix.msbuild_target }}
name: windows-latest
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Cache .nuke/temp, ~/.nuget/packages
uses: actions/cache@v3
with:
path: |
.nuke/temp
~/.nuget/packages
key: ${{ runner.os }}-${{ matrix.msbuild_target }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
- name: Bootstrap MaaDeps
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 maadeps-download.py ${{ matrix.lowercase_target }}-windows
- name: Run './build.cmd DevBuild'
run: |
./build.cmd DevBuild
env:
Reason: ${{ github.event.inputs.Reason }}
ReleaseSimulation: ${{ github.event.inputs.ReleaseSimulation }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v3
with:
name: MAA-win-${{ matrix.lowercase_target }}
path: artifacts

47
.github/workflows/gen-changelog.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
name: gen-changelog
on:
workflow_dispatch:
inputs:
commit_message:
description: 'Commit Message'
type: string
required: false
jobs:
gen:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Generate Changelog
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 tools/ChangelogGenerator/changelog_generator.py
- name: Add files to git
run: |
git status
git config user.name "$env:GITHUB_ACTOR"
git config user.email "$env:GITHUB_ACTOR@users.noreply.github.com"
git add .
$commit_msg = "${{ github.event.inputs.commit_message }}"
if (-not [string]::IsNullOrWhiteSpace($commit_msg)) {
$commit_msg = $commit_msg.Trim()
} else {
$commit_msg = "docs: Auto Generate Changelog - $(Get-Date -Format 'yyyy-MM-dd')"
}
git commit -m "$commit_msg"
git switch -c changelog
- name: Push changes # push the output folder to your repo
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
force: true
branch: changelog

View File

@@ -6,7 +6,6 @@ on:
types: [opened, edited]
issue_comment:
types: [created, edited]
push:
permissions:
contents: read

View File

@@ -144,8 +144,7 @@ jobs:
run: |
mkdir -pv build-ota && cd build-ota
cd ${{ needs.build-win-nightly.outputs.tag }}
mkdir -pv content
unzip -q -O GB2312 -o *.zip -x '*.lib' -x '*.pdb' -x '*.exp' -x '*.config' -x '*.xml' -d content
zip -d *.zip '*.lib' '*.pdb' '*.exp' '*.config' '*.xml'
cd ..
gh release list --repo 'MaaAssistantArknights/MaaAssistantArknights' --limit ${{ inputs.limit || 30 }} | tee ./release_maa.txt

View File

@@ -54,10 +54,8 @@ jobs:
run: |
mkdir -pv build-ota/${{ env.release_tag }}
cd build-ota/${{ env.release_tag }}
mkdir -pv content
gh release download ${{ env.release_tag }} --repo 'MaaAssistantArknights/MaaAssistantArknights' --pattern "MAA-${{ env.release_tag }}-win-${{ matrix.target }}.zip" --clobber
unzip -q -O GB2312 -o "*.zip" -d 'content'
mv *.zip ..
cp *.zip ..
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: "Build OTA"

55
.github/workflows/smoke-testing.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: test
on:
push:
paths:
- '3rdparty/include/**'
- 'include/**'
- 'src/**'
- 'cmake/**'
- 'CMakeLists.txt'
- 'MAA.sln'
- 'resource/**'
- 'MaaDeps/**'
pull_request:
paths:
- '3rdparty/include/**'
- 'include/**'
- 'src/**'
- 'cmake/**'
- 'CMakeLists.txt'
- 'MAA.sln'
- 'resource/**'
- 'MaaDeps/**'
workflow_dispatch:
jobs:
smoke-testing:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: NuGet/setup-nuget@v1.2.0
- run: nuget restore MAA.sln
- name: Bootstrap MaaDeps
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 maadeps-download.py x64-windows
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1
- name: Build MaaSample
run: |
MSBUILD src/Cpp/MaaSample.slnf /t:rebuild /p:Configuration="Debug" /p:Platform="x64" /m
- name: Run Testing
run: |
.\x64\Debug\Sample.exe
- name: Upload Logs
uses: actions/upload-artifact@v3
with:
name: log
path: .\x64\Debug\debug

View File

@@ -1,92 +1,18 @@
## v4.16.0-beta.1
### 新增
- 牛牛抽卡! @MistEO @hguandl
- 新增肉鸽刷指路鳞(请在设置中打开) @MistEO @hguandl
- 新增内置保全作业 雷神工业测试平台 浊蒂版,更稳定 (#4528) @junyihan233 @MistEO
- Mac UI 支持启动 iOS 客户端 @hguandl
- Mac UI 仓库结果导出 JSON @hguandl
- 干员 BOX 识别增加等级和精英度 (#4438) @GD-GK @MistEO
## v4.16.0-rc.1
### 改进
- 优化资源加载速度 @MistEO @hguandl
- 大幅优化视频识别切片准确率 @MistEO
- 优化干员 BOX 识别准确率 @MistEO
- Vision 相关代码 超级大重构 @MistEO
- 优化保全雷神工业第五层部署逻辑 (#4503) @AnnoyingFlowers
- Win UI 添加模拟器检测错误日志输出、启动等待结束提示 @ABA2396
- Win UI Add InstanceManager (#4422) (#4486) @moomiji
- Win UI 脚本运行不阻塞 UI (#4422) (#4486) @moomiji
- Win UI 优化主界面布局 @ABA2396
- Win UI Do not save config on startup @MistEO
- Win UI 减慢弹出速率 @moomiji
- Mac UI 运行时防止系统进入睡眠 @hguandl
- Mac UI 启动前加载外服资源 @hguandl
- Mac UI 添加视频识别说明 @hguandl
- Auto Update Game Resources - 2023-04-27 @MistEO
- Mac UI 添加全选/取消任务的菜单和快捷键 @hguandl
- 更新保全作业 雷神工业测试平台_浊蒂版.json (#4563) @junyihan233
### 修复
- 修复 Win UI Changelog 弹窗 (#4422) (#4486) @moomiji
- 修复剿灭模式下任务失败时备选关卡为未在列表的主线关卡被跳过的问题 @ABA2396
- 修复主线导航 ocrReplace 错误 @ABA2396
- Mac UI 修复自定义基建文件权限 @hguandl
- 修复任务还未结束时就显示 Link Start @ABA2396
- 部分肉鸽地图无法正确部署 (#4522) @LingXii
- 再次修复肉鸽“瞻前顾后”关卡名识别错误 @MistEO
- 修复识别工具失去焦点重置界面问题 @ABA2396
- 修复启动时自动开启模拟器后无法自动停止 @ABA2396
- 修复只自动开启模拟器时停不下来的情况 @moomiji
- 修复二次点击 StartButton1 时误触 StartButton2 @ABA2396
- Mac UI 修复干员识别适配 @hguandl
- 修复路径检查错误 @ABA2396
- Win UI SettingsView displayed incompletely @moomiji
- 修复开启 `启动MAA后自动开启模拟器` 报错 @ABA2396
- perf: TryToStartEmulator 执行不更改按钮状态 #4533 @ABA2396
- 修复开始唤醒任务提前结束,导致基建等任务点进商店的问题 @MistEO
- 修复 mac 上访问好友任务出错
- 修复抽卡有时候进不去的问题 @MistEO
### 其他
- Win UI 同时加载 API @ABA2396
- 更新一图流上传接口 @MistEO
- 从 maa-website 转移文档 (#4545) @horror-proton
- add r2 release mirror @GalvinGao @MistEO
- Auto Tag Release PR (#4531) @MistEO
- 升级 macOS 编译环境,清理多余依赖 @hguandl
- 代码清理 @MistEO @hguandl @ABA2396
- 修复 Win UI 绑定错误 @ABA2396
### For overseas
#### Common
- Added CI that automatically updates game resources, including all overseas clients resources (but needs to be manually triggered). If you want to create a pull request to update game resources, you can use \<your forked repo\> -> `Actions` -> `res-update-game` -> `Run workflow` to update resources instead of manual update. @MistEO
- Fix the recognition error of recruiting senior operators @MistEO
- fix #4471: Add loading instructions for overseas clients resource files @hguandl
#### YostarJP
- Doc : Add EPISODE11 Depot (#4506) @wallsman
- Doc : JP Update EPISODE11「淬火煙塵」 (#4504) @wallsman
#### YostarEN
- Resolve recruit failure for Supporter @hguandl
#### txwy
- 繁中服 傀影肉鴿道具 (#4491) @vonnoq
- 繁中服 保全物件/傀影關卡識別 (#4489) @vonnoq
### For develops
**由于我们的文档正在迁移,为避免造成更多的 conflicts近期新接口还请参考 Win UI 或 Mac UI 集成逻辑**
- 新增抽卡功能,[集成参考](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/f644f8c548568220b61955c0369c9ac6c7bceec4/src/MaaWpfGui/Main/AsstProxy.cs#L1662) @MistEO
- 肉鸽新增刷 `指路鳞` 选项,[集成参考](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/f644f8c548568220b61955c0369c9ac6c7bceec4/src/MaaWpfGui/Main/AsstProxy.cs#L1588), [回调参考](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/f644f8c548568220b61955c0369c9ac6c7bceec4/src/MaaWpfGui/Main/AsstProxy.cs#L774) @MistEO
- 干员 BOX 识别,潜能 改成 1-6 @MistEO
- 新增自动更新游戏资源 CI: `res-update-game` @MistEO
- Add Debug configuration (#4474) @dantmnf @MistEO
- 修正文档干员 box 识别潜能字段 为 [1,6] @MistEO
- 加快更新包构建速度 (#4517) @horror-proton
- 新增 CI自动生成 changelog @MistEO
- 新增 CI自动冒烟测试 (#4565) @MistEO
- 优化了一些 CI @MistEO

View File

@@ -582,8 +582,8 @@ Todo
"own": true, // 是否拥有
"elite": 2, // 精英度 0,1,2
"level": 50, // 干员等级
"potential": 5, // 干员潜能 0-5
"rarity": 5 // 干员稀有度 1-6
"potential": 6, // 干员潜能 [1, 6]
"rarity": 5 // 干员稀有度 [1, 6]
},
{
"id": "char_003_kalts",
@@ -591,7 +591,7 @@ Todo
"own": true,
"elite": 2,
"level": 50,
"potential": 0,
"potential": 1,
"rarity": 6
}
]

View File

@@ -574,7 +574,8 @@ Todo
"own": true, // Whether owned
"elite": 2, // Elite level 0, 1, 2
"level": 50, // Operator level
"potential": 5 // Operator potential 0-5
"potential": 6, // Operator potential [1, 6]
"rarity": 5 // [1, 6]
},
{
"id": "char_003_kalts",
@@ -582,10 +583,11 @@ Todo
"own": true,
"elite": 2,
"level": 50,
"potential": 0
"potential": 1,
"rarity": 6
}
]
```
- `UnsupportedLevel`<br>
Unsupported level name

View File

@@ -543,7 +543,8 @@ Todo
"own": true, // 持っているのでしょうか?
"elite": 2, // エリート主義 0, 1, 2
"level": 50, // グレード
"potential": 5 // ポテンシャル 0-5
"potential": 6, // ポテンシャル [1, 6]
"rarity": 5 // [1, 6]
},
{
"id": "char_003_kalts",
@@ -551,7 +552,8 @@ Todo
"own": true,
"elite": 2,
"level": 50,
"potential": 0
"potential": 1,
"rarity": 6
}
]
```

View File

@@ -543,7 +543,8 @@ Todo
"own": true, // 是否擁有
"elite": 2, // 精英度 0, 1, 2
"level": 50, // 幹員等級
"potential": 5 // 幹員潛能 0-5
"potential": 6, // 幹員潛能 [1, 6]
"rarity": 5 // [1, 6]
},
{
"id": "char_003_kalts",
@@ -551,7 +552,8 @@ Todo
"own": true,
"elite": 2,
"level": 50,
"potential": 0
"potential": 1,
"rarity": 6
}
]
```

View File

@@ -78,6 +78,7 @@
"豆苗",
"夜半",
"伺夜",
"缪尔赛思",
"桃金娘",
"极境",
"琴柳",

View File

@@ -12056,6 +12056,7 @@
156
],
"next": [
"GachaEnter",
"GachaEnter@LoadingText",
"DoGacha"
]

10
src/Cpp/MaaSample.slnf Normal file
View File

@@ -0,0 +1,10 @@
{
"solution": {
"path": "..\\..\\MAA.sln",
"projects": [
"src\\MaaCore\\MaaCore.vcxproj",
"src\\Cpp\\MaaSample.vcxproj",
"src\\SyncRes\\SyncRes.csproj",
]
}
}

View File

@@ -33,7 +33,7 @@ int main([[maybe_unused]] int argc, char** argv)
#ifndef ASST_DEBUG
AsstAsyncConnect(ptr, "adb", "127.0.0.1:5555", nullptr, true);
#else
AsstAsyncConnect(ptr, "adb", "127.0.0.1:3439", "General", true);
AsstAsyncConnect(ptr, "adb", "127.0.0.1:5555", "DEBUG", true);
#endif
if (!AsstConnected(ptr)) {
std::cerr << "connect failed" << std::endl;
@@ -94,7 +94,7 @@ int main([[maybe_unused]] int argc, char** argv)
#else
AsstAppendTask(ptr, "Custom", R"({"task_names": [ "GachaOnce" ] })");
AsstAppendTask(ptr, "Debug", nullptr);
#endif

View File

@@ -322,7 +322,7 @@ std::vector<Assistant::TaskId> asst::Assistant::get_tasks_list() const
bool asst::Assistant::start(bool block)
{
LogTraceFunction;
Log.trace("Start |", block ? "block" : "non block");
Log.info("Start |", block ? "block" : "non block");
if (!m_thread_idle) {
return false;
@@ -341,7 +341,7 @@ bool asst::Assistant::start(bool block)
bool Assistant::stop(bool block)
{
LogTraceFunction;
Log.trace("Stop |", block ? "block" : "non block");
Log.info("Stop |", block ? "block" : "non block");
m_thread_idle = true;

View File

@@ -252,7 +252,7 @@ namespace MaaWpfGui.ViewModels.UI
foreach (var file in Directory.GetFiles(extractDir, "*", SearchOption.AllDirectories))
{
var fileName = Path.GetFileName(file);
if (fileName == "removelist.txt" || fileName == "md5sum.txt")
if (fileName == "removelist.txt" || fileName == "filelist.txt")
{
continue;
}

View File

@@ -201,9 +201,9 @@ class Updater:
f.close()
remove_with_print(removelist_path)
md5sum_path = os.path.join(self.path, 'md5sum.txt')
if os.path.isfile(md5sum_path):
remove_with_print(md5sum_path)
filelist_path = os.path.join(self.path, 'filelist.txt')
if os.path.isfile(filelist_path):
remove_with_print(filelist_path)
for file in os.listdir(self.path):
if 'OTA' in file:
file_path = os.path.join(self.path, file)

View File

@@ -2,7 +2,8 @@ from argparse import ArgumentParser
import os
import json
import re
import requests
import urllib.request
import urllib.error
cur_dir = os.path.dirname(__file__)
contributors_path = os.path.abspath(os.path.join(cur_dir, 'contributors.json'))
@@ -157,13 +158,42 @@ def print_commits(commits: dict, indent: str = "", need_sort: bool = True) -> (s
return ret_message, ret_contributor
def retry_urlopen(*args, **kwargs):
import time
import http.client
for _ in range(5):
try:
resp: http.client.HTTPResponse = urllib.request.urlopen(*args, **kwargs)
return resp
except urllib.error.HTTPError as e:
if e.status == 403 and e.headers.get("x-ratelimit-remaining") == "0":
# rate limit
t0 = time.time()
reset_time = t0 + 10
try:
reset_time = int(e.headers.get("x-ratelimit-reset", 0))
except ValueError:
pass
reset_time = max(reset_time, t0 + 10)
print(f"rate limit exceeded, retrying after {reset_time - t0:.1f} seconds")
time.sleep(reset_time - t0)
continue
raise
# 贡献者名字转账号名
def convert_contributors_name(name: str, commit_hash: str, name_type: str):
global contributors
if name not in contributors:
try:
github_info = requests.get(f"https://api.github.com/repos/MaaAssistantArknights/MaaAssistantArknights/commits/{commit_hash}")
userid = json.loads(github_info.text)[name_type]['login']
req = urllib.request.Request(f"https://api.github.com/repos/MaaAssistantArknights/MaaAssistantArknights/commits/{commit_hash}")
token = os.environ.get("GH_TOKEN", os.environ.get("GITHUB_TOKEN", None))
if token:
req.add_header("Authorization", f"Bearer {token}")
resp = retry_urlopen(req).read()
print(resp)
userid = json.loads(resp)[name_type]['login']
contributors.update({name: userid})
return userid
except Exception as e:

View File

@@ -15,32 +15,27 @@ latest_tag=$(head -n 1 "$releases_txt")
while read tag; do
echo "::group::$tag"
if [ ! -d "$tag"/content ]; then
if [ ! -f "$tag"/MAA-$tag-win-$arch.zip ]; then
mkdir -pv "$tag"
cd "$tag"
echo "Downloading $tag"
gh release download "$tag" --repo $source_repo --pattern "MAA-$tag-win-$arch.zip" --clobber \
|| gh release download "$tag" --repo $source_repo_fallback --pattern "MAA-$tag-win-$arch.zip" --clobber \
|| { echo "::warning:: win $arch not found in release $tag skipping."; echo "::endgroup::"; continue; }
mkdir -pv 'content'
unzip -q -O GB2312 -o "*.zip" -d 'content'
rm -fv *.zip
cd $working_dir
mv MAA-$tag-win-$arch.zip $tag
else
echo "$tag"/content/ already exists
echo "$tag"/MAA-$tag-win-$arch.zip already exists
fi
if [[ "$tag" == "$latest_tag" ]]; then
cd "$latest_tag"/content/
find * -type f -exec md5sum '{}' \; > md5sum.txt
cd $working_dir
find "$latest_tag"
else
echo "Comparing and installing files $tag...$latest_tag"
mkdir -pv "$tag"/pkg
"$script_dir"/makeota.sh "$tag"/content "$latest_tag"/content "$tag"/pkg
echo "Creating zip archive"
cd "$tag"/pkg
zip -q -9 -r "$working_dir"/"MAAComponent-OTA-${tag}_${latest_tag}-win-$arch.zip" .
"$script_dir"/zipota.sh \
$tag/MAA-$tag-win-$arch.zip \
$latest_tag/MAA-$latest_tag-win-$arch.zip \
"$working_dir"/"MAAComponent-OTA-${tag}_${latest_tag}-win-$arch.zip"
rm -fv $tag/MAA-$tag-win-$arch.zip
cd $working_dir
fi

5
tools/OTAPacker/ziplist.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
zipinfo -O GB2312 -v $1 \
| sed -n -e '/^Central directory entry/,+3p' -e '/32-bit CRC value (hex):/p' | grep '^ ' \
| sed -e 's/^ //g' | sed -z 's/\n32-bit CRC value (hex):\s*/\t/g' \
| awk '{last = $NF; $NF=""; print last,$0}'

29
tools/OTAPacker/zipota.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/usr/bin/env bash
script_dir="$(dirname $(realpath "$0"))"
from_zip="$1"
to_zip="$2"
out_zip="$3"
from_list="$("$script_dir"/ziplist.sh "$from_zip" | sort)"
to_list="$("$script_dir"/ziplist.sh "$to_zip" | sort)"
# files with same name and content
comm_list="$(comm -12 <(echo "$from_list") <(echo "$to_list"))"
from_fn="$(echo "$from_list" | cut -d\ -f2- | sort)"
to_fn="$(echo "$to_list" | cut -d\ -f2- | sort)"
cp -v "$to_zip" "$out_zip"
echo "$comm_list" | cut -d\ -f2- | xargs zip --delete "$out_zip"
tmpdir=$(mktemp -d /tmp/zipota-files.XXX)
comm -23 <(echo "$from_fn") <(echo "$to_fn") > "$tmpdir"/removelist.txt
echo "$to_fn" > "$tmpdir"/filelist.txt
zip -r -j "$out_zip" "$tmpdir"/removelist.txt "$tmpdir"/filelist.txt
rm -rf $tmpdir