From e8adc7cfbeeeace670bfcf009fdc1d822a062f74 Mon Sep 17 00:00:00 2001
From: MCDeltaT <68516357+MustardChef@users.noreply.github.com>
Date: Fri, 15 Dec 2023 01:18:28 +0000
Subject: [PATCH] Add GitHub Action Workflows and MagiskOnWSA files.
---
.github/ISSUE_TEMPLATE/bug_report.yml | 32 +-
.github/ISSUE_TEMPLATE/config.yml | 8 +-
.github/ISSUE_TEMPLATE/documentation.yml | 6 +-
.github/ISSUE_TEMPLATE/feature_request.yml | 6 +-
.github/workflows/build.yml | 258 +++++
.github/workflows/buildarm64.yml | 199 ++++
.github/workflows/update.yml | 699 +++++++++++++
MagiskOnWSA/.gitattributes | 10 +
MagiskOnWSA/DLL/README.md | 3 +
MagiskOnWSA/DLL/WsaPatch.dll | Bin 0 -> 64000 bytes
MagiskOnWSA/DLL/icu.dll | Bin 0 -> 2579728 bytes
MagiskOnWSA/LICENSE | 661 ++++++++++++
.../Update Check/KernelSUUpdateCheck.py | 34 +
MagiskOnWSA/Update Check/MTGUpdateCheck.py | 34 +
.../Update Check/MagiskCanaryUpdateCheck.py | 34 +
.../Update Check/MagiskStableUpdateCheck.py | 34 +
.../Update Check/WSAInsiderUpdateCheck.py | 162 +++
.../Update Check/WSARetailUpdateCheck.py | 145 +++
.../Update Check/update-downloadlinks.py | 92 ++
.../Update Check/update-downloadvar.py | 41 +
MagiskOnWSA/Update Check/windows10patch.ps1 | 18 +
.../system/priv-app/VpnDialogs/VpnDialogs.apk | Bin 0 -> 163111 bytes
MagiskOnWSA/bin/EROFS/fuse.erofs | Bin 0 -> 1599736 bytes
MagiskOnWSA/bin/EROFS/mkfs.erofs | Bin 0 -> 1921656 bytes
MagiskOnWSA/cacerts/01ee3bf3.0 | 81 ++
MagiskOnWSA/cacerts/024c10e0.0 | 81 ++
MagiskOnWSA/cacerts/0888e817.0 | 123 +++
MagiskOnWSA/cacerts/0b4055f7.0 | 81 ++
MagiskOnWSA/cacerts/281f8e47.0 | 123 +++
MagiskOnWSA/cacerts/2ef957f0.0 | 123 +++
MagiskOnWSA/cacerts/39698488.0 | 81 ++
MagiskOnWSA/cacerts/3f66ddee.0 | 123 +++
MagiskOnWSA/cacerts/42afec87.0 | 122 +++
MagiskOnWSA/cacerts/482e0622.0 | 81 ++
MagiskOnWSA/cacerts/4a3b190e.0 | 123 +++
MagiskOnWSA/cacerts/4eba579e.0 | 123 +++
MagiskOnWSA/cacerts/6207c6f5.0 | 123 +++
MagiskOnWSA/cacerts/66bbb532.0 | 81 ++
MagiskOnWSA/cacerts/820d5f23.0 | 81 ++
MagiskOnWSA/cacerts/85c0c4be.0 | 123 +++
MagiskOnWSA/cacerts/a4f6f3c0.0 | 123 +++
MagiskOnWSA/cacerts/b0396035.0 | Bin 0 -> 1630 bytes
MagiskOnWSA/cacerts/ea335731.0 | 81 ++
MagiskOnWSA/cacerts/f9b4d31c.0 | 81 ++
MagiskOnWSA/cacerts/fbb5e364.0 | 81 ++
MagiskOnWSA/installer/Run.bat | 10 +
MagiskOnWSA/installer/arm64/Install.ps1 | 142 +++
MagiskOnWSA/installer/arm64/MakePri.ps1 | 65 ++
MagiskOnWSA/installer/x64/Install.ps1 | 131 +++
MagiskOnWSA/installer/x64/MakePri.ps1 | 53 +
MagiskOnWSA/linker/libc.so | Bin 0 -> 985456 bytes
MagiskOnWSA/linker/libdl.so | Bin 0 -> 5848 bytes
MagiskOnWSA/linker/libm.so | Bin 0 -> 311848 bytes
MagiskOnWSA/linker/linker64 | Bin 0 -> 1503000 bytes
MagiskOnWSA/scripts/build.sh | 961 ++++++++++++++++++
MagiskOnWSA/scripts/extractMagisk.py | 104 ++
MagiskOnWSA/scripts/extractWSA.py | 109 ++
MagiskOnWSA/scripts/fixGappsProp.py | 96 ++
MagiskOnWSA/scripts/generateGappsLink.py | 59 ++
MagiskOnWSA/scripts/generateKernelSULink.py | 99 ++
MagiskOnWSA/scripts/generateMagiskLink.py | 65 ++
MagiskOnWSA/scripts/generateWSALinks.py | 198 ++++
MagiskOnWSA/scripts/requirements.txt | 2 +
.../system/priv-app/VpnDialogs/VpnDialogs.apk | Bin 0 -> 163111 bytes
MagiskOnWSA/xml/FE3FileUrl.xml | 37 +
MagiskOnWSA/xml/GetCookie.xml | 37 +
MagiskOnWSA/xml/WUIDRequest.xml | 677 ++++++++++++
MagiskOnWSA/xml/priconfig.xml | 29 +
68 files changed, 7363 insertions(+), 26 deletions(-)
create mode 100644 .github/workflows/build.yml
create mode 100644 .github/workflows/buildarm64.yml
create mode 100644 .github/workflows/update.yml
create mode 100644 MagiskOnWSA/.gitattributes
create mode 100644 MagiskOnWSA/DLL/README.md
create mode 100644 MagiskOnWSA/DLL/WsaPatch.dll
create mode 100644 MagiskOnWSA/DLL/icu.dll
create mode 100644 MagiskOnWSA/LICENSE
create mode 100644 MagiskOnWSA/Update Check/KernelSUUpdateCheck.py
create mode 100644 MagiskOnWSA/Update Check/MTGUpdateCheck.py
create mode 100644 MagiskOnWSA/Update Check/MagiskCanaryUpdateCheck.py
create mode 100644 MagiskOnWSA/Update Check/MagiskStableUpdateCheck.py
create mode 100644 MagiskOnWSA/Update Check/WSAInsiderUpdateCheck.py
create mode 100644 MagiskOnWSA/Update Check/WSARetailUpdateCheck.py
create mode 100644 MagiskOnWSA/Update Check/update-downloadlinks.py
create mode 100644 MagiskOnWSA/Update Check/update-downloadvar.py
create mode 100644 MagiskOnWSA/Update Check/windows10patch.ps1
create mode 100644 MagiskOnWSA/arm64/system/priv-app/VpnDialogs/VpnDialogs.apk
create mode 100644 MagiskOnWSA/bin/EROFS/fuse.erofs
create mode 100644 MagiskOnWSA/bin/EROFS/mkfs.erofs
create mode 100644 MagiskOnWSA/cacerts/01ee3bf3.0
create mode 100644 MagiskOnWSA/cacerts/024c10e0.0
create mode 100644 MagiskOnWSA/cacerts/0888e817.0
create mode 100644 MagiskOnWSA/cacerts/0b4055f7.0
create mode 100644 MagiskOnWSA/cacerts/281f8e47.0
create mode 100644 MagiskOnWSA/cacerts/2ef957f0.0
create mode 100644 MagiskOnWSA/cacerts/39698488.0
create mode 100644 MagiskOnWSA/cacerts/3f66ddee.0
create mode 100644 MagiskOnWSA/cacerts/42afec87.0
create mode 100644 MagiskOnWSA/cacerts/482e0622.0
create mode 100644 MagiskOnWSA/cacerts/4a3b190e.0
create mode 100644 MagiskOnWSA/cacerts/4eba579e.0
create mode 100644 MagiskOnWSA/cacerts/6207c6f5.0
create mode 100644 MagiskOnWSA/cacerts/66bbb532.0
create mode 100644 MagiskOnWSA/cacerts/820d5f23.0
create mode 100644 MagiskOnWSA/cacerts/85c0c4be.0
create mode 100644 MagiskOnWSA/cacerts/a4f6f3c0.0
create mode 100644 MagiskOnWSA/cacerts/b0396035.0
create mode 100644 MagiskOnWSA/cacerts/ea335731.0
create mode 100644 MagiskOnWSA/cacerts/f9b4d31c.0
create mode 100644 MagiskOnWSA/cacerts/fbb5e364.0
create mode 100644 MagiskOnWSA/installer/Run.bat
create mode 100644 MagiskOnWSA/installer/arm64/Install.ps1
create mode 100644 MagiskOnWSA/installer/arm64/MakePri.ps1
create mode 100644 MagiskOnWSA/installer/x64/Install.ps1
create mode 100644 MagiskOnWSA/installer/x64/MakePri.ps1
create mode 100644 MagiskOnWSA/linker/libc.so
create mode 100644 MagiskOnWSA/linker/libdl.so
create mode 100644 MagiskOnWSA/linker/libm.so
create mode 100644 MagiskOnWSA/linker/linker64
create mode 100644 MagiskOnWSA/scripts/build.sh
create mode 100644 MagiskOnWSA/scripts/extractMagisk.py
create mode 100644 MagiskOnWSA/scripts/extractWSA.py
create mode 100644 MagiskOnWSA/scripts/fixGappsProp.py
create mode 100644 MagiskOnWSA/scripts/generateGappsLink.py
create mode 100644 MagiskOnWSA/scripts/generateKernelSULink.py
create mode 100644 MagiskOnWSA/scripts/generateMagiskLink.py
create mode 100644 MagiskOnWSA/scripts/generateWSALinks.py
create mode 100644 MagiskOnWSA/scripts/requirements.txt
create mode 100644 MagiskOnWSA/x64/system/priv-app/VpnDialogs/VpnDialogs.apk
create mode 100644 MagiskOnWSA/xml/FE3FileUrl.xml
create mode 100644 MagiskOnWSA/xml/GetCookie.xml
create mode 100644 MagiskOnWSA/xml/WUIDRequest.xml
create mode 100644 MagiskOnWSA/xml/priconfig.xml
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 3356b4f..e581854 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,5 +1,5 @@
-name: Bug Report (错误报告)
-description: Create a report to receive assistance with any issues that you face during the installation of WSA and/or during the use of WSA. | 创建一份报告,以便在安装WSA和/或使用WSA过程中遇到任何问题时获得帮助。
+name: Bug Report
+description: Create a report to receive assistance with any issues that you face during the installation of WSA and/or during the use of WSA.
title: "[BUG]"
labels: bug
@@ -7,49 +7,49 @@ body:
- type: textarea
id: description
attributes:
- label: Describe the bug | 描述一下这个错误
- description: A clear and concise description of what the bug is. Include screenshots if possible | 简明扼要地描述该错误是什么。如果可能的话,包括屏幕截图
+ label: Describe the bug
+ description: A clear and concise description of what the bug is. Include screenshots if possible.
validations:
required: true
- type: textarea
id: reproduce
attributes:
- label: Steps to reproduce the issue | 重现该问题的步骤
- description: Include steps to reproduce the behaviour. | 包括重现该行为的步骤
+ label: Steps to reproduce the issue
+ description: Include steps to reproduce the behaviour.
validations:
required: true
- type: textarea
id: expected
attributes:
- label: Expected behaviour | 预期的行为
- description: A clear and concise description of what you expected to happen. | 清晰而简明地描述你所期望发生的事情
+ label: Expected behaviour
+ description: A clear and concise description of what you expected to happen.
validations:
required: true
- type: textarea
id: source
attributes:
- label: Downloaded Build Of WSA | 已下载的WSA版本
- description: Which build of WSA did you download? Provide the name of the .zip/.7z file, and the link to the download page if possible. | 您下载的是哪个版本的WSA?如果可能的话,请提供.zip文件的名称,以及下载页面的链接。
+ label: Downloaded Build Of WSA
+ description: Which build of WSA did you download? Provide the name of the .zip/.7z file, and the link to the download page if possible.
validations:
required: true
- type: input
id: winbuild
attributes:
- label: Windows build number | Windows构建号
- description: You can find the build number by typing winver in the Windows search box. | 你可以通过在Windows搜索框中输入winver来找到构建号。
+ label: Windows build number
+ description: You can find the build number by typing winver in the Windows search box.
validations:
required: true
- type: textarea
id: pcspecs
attributes:
- label: PC Specification | 个人电脑规格
- description: You can find your PC Specification by searching for msinfo32 in Windows Search and click the top result to open the System Information app. | 你可以通过在Windows搜索中搜索msinfo32并点击顶部的结果打开系统信息应用程序来查找你的PC规格。
+ label: PC Specification
+ description: You can find your PC Specification by searching for msinfo32 in Windows Search and click the top result to open the System Information app.
validations:
required: true
- type: textarea
id: other
attributes:
- label: Additional context | 额外的背景
- description: Add any other context about the problem here. | 在此添加关于该问题的任何其他背景
+ label: Additional context
+ description: Add any other context about the problem here.
validations:
required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index e764d3c..d5bdb99 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- - name: FAQs (常见问题)
+ - name: FAQs
url: https://github.com/MustardChef/WSABuilds#--uninstallation
- about: Have you taken a look at the FAQs? | 你看了一下常见问题吗?
- - name: General Support (一般支持)
+ about: Have you taken a look at the FAQs?
+ - name: General Support
url: https://discord.gg/2thee7zzHZ
- about: For general support queries, please ask in the Discord. | 对于一般的支持查询,请在讨论区询问, Discord。
+ about: For general support queries, please ask in the Discord.
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml
index 760372b..28649e6 100644
--- a/.github/ISSUE_TEMPLATE/documentation.yml
+++ b/.github/ISSUE_TEMPLATE/documentation.yml
@@ -1,11 +1,11 @@
-name: Documentation (文档)
-description: Report an issue with the project's documentation | 报告项目文件中的一个问题
+name: Documentation
+description: Report an issue with or request something regarding the project's documentation.
title: "[DOC]"
labels: documentation
body:
- type: textarea
id: description
attributes:
- label: Please provide a clear and concise description of the changes you would like to see made to the documentation. | 请清晰简明地描述你希望看到的对文件的修改。
+ label: Please provide a clear and concise description of the changes you would like to see made to the documentation.
validations:
required: true
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index 7d8c877..e479cbe 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -1,11 +1,11 @@
-name: Feature request (功能请求)
-description: Suggest an idea for this project or Prebuilt WSA Build that you want to be added to Releases | 为这个项目或已构建的WSA版本提出一个想法,您希望将其添加到发布版本中。
+name: Feature request
+description: Suggest an idea for this project or Prebuilt WSA Build that you want to be added to Releases
title: "[REQUEST]"
labels: enhancement
body:
- type: textarea
id: description
attributes:
- label: Describe your request | 描述您的要求
+ label: Describe your request
validations:
required: true
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..bdd1bc4
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,258 @@
+name: Auto Build function (Use for call only)
+on:
+ workflow_call:
+ inputs:
+ arch:
+ type: string
+ gapps:
+ type: string
+ root:
+ type: string
+ insider:
+ type: string
+ magiskver:
+ type: string
+ devicemodel:
+ type: string
+ amazonflag:
+ type: string
+ compressformat:
+ type: string
+ release_type:
+ type: string
+
+
+jobs:
+ build:
+ name: Build WSA
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout ♻️
+ uses: actions/checkout@v4
+
+ - name: Setup Python 🏭
+ uses: actions/setup-python@v4
+ with:
+ check-latest: true
+ python-version: '3.x'
+ cache: 'pip'
+ cache-dependency-path: MagiskOnWSA/scripts/
+
+ - name: Setup Python3 Virtual Enviroment 🐍
+ working-directory: MagiskOnWSA/scripts
+ run: |
+ sudo apt-get update
+ PYTHON_VENV_DIR="$(dirname "$PWD")/python3-env"
+ python3 -m venv "$PYTHON_VENV_DIR" || abort "Failed to create python3 virtual env"
+ # shellcheck disable=SC1091
+ source "$PYTHON_VENV_DIR/bin/activate" || abort "Failed to activate python3 virtual env"
+ python3 -c "import pkg_resources; pkg_resources.require(open('requirements.txt',mode='r'))" &>/dev/null || {
+ echo "Installing Python3 dependencies"
+ python3 -m pip install --upgrade -r requirements.txt || abort "Failed to install python3 dependencies"
+ }
+ deactivate
+
+ - name: Install Ubuntu Dependencies 🧑🏭
+ uses: awalsh128/cache-apt-pkgs-action@v1
+ with:
+ packages: e2fsprogs attr unzip qemu-utils python3-venv
+ version: 1.0
+
+ - name: Check workflow inputs
+ run: |
+ echo ${{ inputs.arch }}
+ echo ${{ inputs.gapps }}
+ echo ${{ inputs.root }}
+ echo ${{ inputs.insider }}
+ echo ${{ inputs.magiskver }}
+ echo ${{ inputs.devicemodel }}
+ echo ${{ inputs.amazonflag }}
+ echo ${{ inputs.compressformat }}
+ echo ${{ inputs.release_type }}
+
+ - name: Build WSA ${{ inputs.arch }} with GApps ${{ inputs.root }} 🏗️
+ id: wsa
+ working-directory: MagiskOnWSA
+ run: |
+ if [[ "${{ inputs.release_type }}" == "WIF" ]]; then
+ RLS_TYPE="latest"
+ else
+ RLS_TYPE="retail"
+ fi
+ chmod -R 777 ./
+ mkdir -p download
+ ./scripts/build.sh --arch ${{ inputs.arch }} --release-type $RLS_TYPE --magisk-ver ${{ inputs.magiskver }} --gapps-brand ${{ inputs.gapps }} --root-sol ${{ inputs.root }} --custom-model ${{ inputs.devicemodel }} ${{ inputs.amazonflag }} --compress-format ${{ inputs.compressformat }}
+
+ - name: Prepare release tag 🏷️
+ id: releasetag
+ run: |
+ if [[ "${{ inputs.release_type }}" == "WIF" ]]; then
+ currentver=$(curl -s https://raw.githubusercontent.com/MustardChef/test1.0/update/WIF.appversion)
+ folderpath="/WSABuilds/Builds/Windows Subsystem For Android™ v$currentver/Windows 11/Windows 11 x86_64"
+ folderpathwin10="/WSABuilds/Builds/Windows Subsystem For Android™ v$currentver/Windows 10/"
+ echo "DRIVE_FOLDER_PATH=$folderpath" >> $GITHUB_ENV
+ echo "DRIVE_FOLDER_PATH_WIN10=$folderpathwin10" >> $GITHUB_ENV
+ echo "WSA_TAG=Windows_11_$currentver" >> $GITHUB_ENV
+ echo "WSA_TAG_WIN10=Windows_10_$currentver" >> $GITHUB_ENV
+ echo "WSA_VER=$currentver" >> $GITHUB_ENV
+ else
+ currentver=$(curl -s https://raw.githubusercontent.com/MustardChef/test1.0/update/retail.appversion)
+ folderpath="/WSABuilds/Builds/Windows Subsystem For Android™ v$currentver/Windows 11/Windows 11 x86_64"
+ folderpathwin10="/WSABuilds/Builds/Windows Subsystem For Android™ v$currentver/Windows 10/"
+ echo "DRIVE_FOLDER_PATH=$folderpath" >> $GITHUB_ENV
+ echo "DRIVE_FOLDER_PATH_WIN10=$folderpathwin10" >> $GITHUB_ENV
+ echo "WSA_TAG=Windows_11_$currentver" >> $GITHUB_ENV
+ echo "WSA_TAG_WIN10=Windows_10_$currentver" >> $GITHUB_ENV
+ echo "WSA_VER=$currentver" >> $GITHUB_ENV
+ fi
+
+ - name: Check GitHub ENV variables
+ run: |
+ echo ${{ steps.wsa.outputs.artifact }}
+ echo ${{ steps.wsa.outputs.artifact_folder }}
+ echo ${{ steps.date.outputs.date }}
+ echo ${{ steps.wsa.outputs.built }}
+ echo ${{ env.WSA_TAG }}
+ echo ${{ env.WSA_TAG_WIN10 }}
+ echo ${{ env.WSA_VER }}
+ echo ${{ env.DRIVE_FOLDER_PATH }}
+ echo ${{ env.DRIVE_FOLDER_PATH_WIN10 }}
+
+ - name: Pass to Windows 💸
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ steps.wsa.outputs.artifact }}-${{ steps.wsa.outputs.built }}
+ path: MagiskOnWSA/output
+
+ outputs:
+ zipname: ${{ steps.wsa.outputs.artifact }}
+ artifact_folder: ${{ steps.wsa.outputs.artifact_folder }}
+ date: ${{ steps.date.outputs.date }}
+ built: ${{ steps.wsa.outputs.built }}
+ tag: ${{ env.WSA_TAG }}
+ tagwin10: ${{ env.WSA_TAG_WIN10 }}
+ wsaver: ${{ env.WSA_VER }}
+ onedrivepath: ${{ env.DRIVE_FOLDER_PATH }}
+ onedrivepathwin10: ${{ env.DRIVE_FOLDER_PATH_WIN10 }}
+
+ make-pri:
+ name: Merge PRI resources
+ runs-on: windows-latest
+ needs: build
+ steps:
+ - name: Checkout ♻️
+ uses: actions/checkout@v4
+
+ - name: Download built artifact ⌛
+ uses: actions/download-artifact@v3
+ with:
+ path: output
+ name: ${{ needs.build.outputs.zipname }}-${{ needs.build.outputs.built }}
+
+ - name: Remove unused artifact ❌
+ uses: geekyeggo/delete-artifact@v2
+ with:
+ name: ${{ needs.build.outputs.zipname }}-${{ needs.build.outputs.built }}
+
+ - name: Check Subdirectories and Directories 1
+ run: tree /F ${{ github.workspace }}
+
+ - name: Check Subdirectories and Directories 2
+ run: tree /F "${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}"
+
+ - name: Merge language and density resources 🧙🏻♂️
+ run: |
+ if ("${{ inputs.arch }}" -eq "x64") {
+ (Start-Process pwsh.exe -NoNewWindow -PassThru -Args "-ExecutionPolicy Bypass -File MakePri.ps1" -WorkingDirectory "${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}").WaitForExit()
+ } else {
+ Copy-Item -Force "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\arm64\makepri.exe" "${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}"
+ }
+
+ - name: Compact Images 💿
+ run: |
+ foreach ($Partition in 'system','product','system_ext','vendor') {
+ Write-Output "Optimizing of $Partition..."
+ Write-Output "SELECT VDISK FILE=`"${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}\$Partition.vhdx`"`
+ ATTACH VDISK READONLY`
+ COMPACT VDISK`
+ DETACH VDISK" | Set-Content -Path "$Partition.txt" -Encoding Ascii
+ Start-Process -NoNewWindow -Wait "diskpart.exe" -Args "/s $Partition.txt" -RedirectStandardOutput NUL
+ }
+
+ - name: Compress artifact for Windows 11 x64 Build📦
+ run: 7z a -t7z -mx=6 -m0=LZMA2 -ms=on -mmt=8 -- "${{ needs.build.outputs.zipname }}.7z" .\output\*
+
+ - name: File Checksum for Windows 11 x64 Build✔️
+ id: run
+ run: ("hash=" + $(Get-FileHash -Path ${{ needs.build.outputs.zipname }}.7z -Algorithm SHA256).Hash.ToLower().ToString()) | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding UTF8 -Append
+
+ # - name: Setup rclone 🎚️
+ # uses: AnimMouse/setup-rclone@v1.5.1
+ # with:
+ # rclone_config: ${{ secrets.RCLONE_CONFIG }}
+
+ # - name: Upload build to OneDrive for Windows 11 x64 Build⏫
+ # run: |
+ # echo ${{ needs.build.outputs.onedrivepath }}
+ # rclone copy ${{ needs.build.outputs.zipname }}.7z OneDrive:"${{ needs.build.outputs.onedrivepath }}" --create-empty-src-dirs
+ # env:
+ # RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }}
+
+ - name: Upload Windows 11 x64 build to release 🤌
+ uses: softprops/action-gh-release@v1
+ with:
+ files: ${{ needs.build.outputs.zipname }}.7z
+ fail_on_unmatched_files: true
+ append_body: false
+ tag_name: ${{ needs.build.outputs.tag }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Check Subdirectories and Directories 3
+ run: tree /F ${{ github.workspace }}
+
+ - name: Check Subdirectories and Directories 4
+ run: tree /F "${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}"
+
+ - name: Run WSA Windows 10 PowerShell Patch Script
+ run: |
+ Write-Output "`r`nPatching Windows 10 AppxManifest file..."
+ $outputDir = "${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}"
+ $xml = [xml](Get-Content "$outputDir\AppxManifest.xml")
+ $nsm = New-Object Xml.XmlNamespaceManager($xml.NameTable)
+ $nsm.AddNamespace('rescap', "http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities")
+ $nsm.AddNamespace('desktop6', "http://schemas.microsoft.com/appx/manifest/desktop/windows10/6")
+ $node = $xml.Package.Capabilities.SelectSingleNode("rescap:Capability[@Name='customInstallActions']", $nsm)
+ $xml.Package.Capabilities.RemoveChild($node) | Out-Null
+ $node = $xml.Package.Extensions.SelectSingleNode("desktop6:Extension[@Category='windows.customInstall']", $nsm)
+ $xml.Package.Extensions.RemoveChild($node) | Out-Null
+ $xml.Package.Dependencies.TargetDeviceFamily.MinVersion = "10.0.19041.264"
+ $xml.Save("$outputDir\AppxManifest.xml")
+ Write-Output "`r`nDownloading modifided DLL file..."
+ $ProgressPreference = 'SilentlyContinue'
+ Invoke-WebRequest -Uri "https://github.com/MustardChef/WSAPatch/raw/main/DLLs%20for%20WSABuilds/winhttp.dll" -OutFile "$outputDir\WSAClient\winhttp.dll"
+ Invoke-WebRequest -Uri "https://github.com/MustardChef/WSAPatch/raw/main/DLLs%20for%20WSABuilds/WsaPatch.dll" -OutFile "$outputDir\WSAClient\WsaPatch.dll"
+ Invoke-WebRequest -Uri "https://github.com/MustardChef/WSAPatch/raw/main/DLLs%20for%20WSABuilds/icu.dll" -OutFile "$outputDir\WSAClient\icu.dll"
+ shell: pwsh
+
+ - name: Compress artifact for Windows 10 x64 Build📦
+ run: 7z a -t7z -mx=6 -m0=LZMA2 -ms=on -mmt=8 -sdel -- "${{ needs.build.outputs.zipname }}_Windows_10.7z" .\output\*
+
+ - name: File Checksum for Windows 10 x64 Build✔️
+ id: run2
+ run: ("hash=" + $(Get-FileHash -Path "${{ needs.build.outputs.zipname }}_Windows_10.7z" -Algorithm SHA256).Hash.ToLower().ToString()) | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding UTF8 -Append
+
+ # - name: Upload build to OneDrive for Windows 10 x64 Build⏫
+ # run: |
+ # echo ${{ needs.build.outputs.onedrivepathwin10 }}
+ # rclone copy ${{ needs.build.outputs.zipname }}_Windows_10.7z OneDrive:"${{ needs.build.outputs.onedrivepathwin10 }}" --create-empty-src-dirs
+ # env:
+ # RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }}
+
+ - name: Upload Windows 10 x64 build to release 🤌
+ uses: softprops/action-gh-release@v1
+ with:
+ files: ${{ needs.build.outputs.zipname }}_Windows_10.7z
+ fail_on_unmatched_files: true
+ append_body: false
+ tag_name: ${{ needs.build.outputs.tagwin10 }}
+ token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/buildarm64.yml b/.github/workflows/buildarm64.yml
new file mode 100644
index 0000000..75a90da
--- /dev/null
+++ b/.github/workflows/buildarm64.yml
@@ -0,0 +1,199 @@
+name: Auto Build function (Use for call only)
+on:
+ workflow_call:
+ inputs:
+ arch:
+ type: string
+ gapps:
+ type: string
+ root:
+ type: string
+ insider:
+ type: string
+ magiskver:
+ type: string
+ devicemodel:
+ type: string
+ amazonflag:
+ type: string
+ compressformat:
+ type: string
+ release_type:
+ type: string
+
+
+jobs:
+ build:
+ name: Build WSA
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout ♻️
+ uses: actions/checkout@v4
+
+ - name: Setup Python 🏭
+ uses: actions/setup-python@v4
+ with:
+ check-latest: true
+ python-version: '3.x'
+ cache: 'pip'
+ cache-dependency-path: MagiskOnWSA/scripts/
+
+ - name: Setup Python3 Virtual Enviroment 🐍
+ working-directory: MagiskOnWSA/scripts
+ run: |
+ sudo apt-get update
+ PYTHON_VENV_DIR="$(dirname "$PWD")/python3-env"
+ python3 -m venv "$PYTHON_VENV_DIR" || abort "Failed to create python3 virtual env"
+ # shellcheck disable=SC1091
+ source "$PYTHON_VENV_DIR/bin/activate" || abort "Failed to activate python3 virtual env"
+ python3 -c "import pkg_resources; pkg_resources.require(open('requirements.txt',mode='r'))" &>/dev/null || {
+ echo "Installing Python3 dependencies"
+ python3 -m pip install --upgrade -r requirements.txt || abort "Failed to install python3 dependencies"
+ }
+ deactivate
+
+ - name: Install Ubuntu Dependencies 🧑🏭
+ uses: awalsh128/cache-apt-pkgs-action@v1
+ with:
+ packages: e2fsprogs attr unzip qemu-utils python3-venv
+ version: 1.0
+
+ - name: Check workflow inputs
+ run: |
+ echo ${{ inputs.arch }}
+ echo ${{ inputs.gapps }}
+ echo ${{ inputs.root }}
+ echo ${{ inputs.insider }}
+ echo ${{ inputs.magiskver }}
+ echo ${{ inputs.devicemodel }}
+ echo ${{ inputs.amazonflag }}
+ echo ${{ inputs.compressformat }}
+ echo ${{ inputs.release_type }}
+
+ - name: Build WSA ${{ inputs.arch }} with GApps ${{ inputs.root }} 🏗️
+ id: wsa
+ working-directory: MagiskOnWSA
+ run: |
+ if [[ "${{ inputs.release_type }}" == "WIF" ]]; then
+ RLS_TYPE="latest"
+ else
+ RLS_TYPE="retail"
+ fi
+ chmod -R 777 ./
+ mkdir -p download
+ ./scripts/build.sh --arch ${{ inputs.arch }} --release-type $RLS_TYPE --magisk-ver ${{ inputs.magiskver }} --gapps-brand ${{ inputs.gapps }} --root-sol ${{ inputs.root }} --custom-model ${{ inputs.devicemodel }} ${{ inputs.amazonflag }} --compress-format ${{ inputs.compressformat }}
+
+ - name: Prepare release tag 🏷️
+ id: releasetag
+ run: |
+ if [[ "${{ inputs.release_type }}" == "WIF" ]]; then
+ currentver=$(curl -s https://raw.githubusercontent.com/MustardChef/test1.0/update/WIF.appversion)
+ folderpath="/WSABuilds/Builds/Windows Subsystem For Android™ v$currentver/Windows 11/Windows 11 arm64"
+ echo "DRIVE_FOLDER_PATH=$folderpath" >> $GITHUB_ENV
+ echo "WSA_TAG=Windows_11_${currentver}_arm64" >> $GITHUB_ENV
+ echo "WSA_VER=$currentver" >> $GITHUB_ENV
+ else
+ currentver=$(curl -s https://raw.githubusercontent.com/MustardChef/test1.0/update/retail.appversion)
+ folderpath="/WSABuilds/Builds/Windows Subsystem For Android™ v$currentver/Windows 11/Windows 11 arm64"
+ echo "DRIVE_FOLDER_PATH=$folderpath" >> $GITHUB_ENV
+ echo "WSA_TAG=Windows_11_${currentver}_arm64" >> $GITHUB_ENV
+ echo "WSA_VER=$currentver" >> $GITHUB_ENV
+ fi
+
+ - name: Check GitHub ENV variables
+ run: |
+ echo ${{ steps.wsa.outputs.artifact }}
+ echo ${{ steps.wsa.outputs.artifact_folder }}
+ echo ${{ steps.date.outputs.date }}
+ echo ${{ steps.wsa.outputs.built }}
+ echo ${{ env.WSA_TAG }}
+ echo ${{ env.WSA_VER }}
+ echo ${{ env.DRIVE_FOLDER_PATH }}
+
+ - name: Pass to Windows 💸
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ steps.wsa.outputs.artifact }}-${{ steps.wsa.outputs.built }}
+ path: MagiskOnWSA/output
+
+ outputs:
+ zipname: ${{ steps.wsa.outputs.artifact }}
+ artifact_folder: ${{ steps.wsa.outputs.artifact_folder }}}
+ date: ${{ steps.date.outputs.date }}
+ built: ${{ steps.wsa.outputs.built }}
+ tag: ${{ env.WSA_TAG }}
+ wsaver: ${{ env.WSA_VER }}
+ onedrivepath: ${{ env.DRIVE_FOLDER_PATH }}
+
+ make-pri:
+ name: Merge PRI resources
+ runs-on: windows-latest
+ needs: build
+ steps:
+ - name: Checkout ♻️
+ uses: actions/checkout@v4
+
+ - name: Download built artifact ⌛
+ uses: actions/download-artifact@v3
+ with:
+ path: output
+ name: ${{ needs.build.outputs.zipname }}-${{ needs.build.outputs.built }}
+
+ - name: Remove unused artifact ❌
+ uses: geekyeggo/delete-artifact@v2
+ with:
+ name: ${{ needs.build.outputs.zipname }}-${{ needs.build.outputs.built }}
+
+ - name: Check Subdirectories and Directories 1
+ run: tree /F ${{ github.workspace }}
+
+ - name: Check Subdirectories and Directories 2
+ run: tree /F "${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}"
+
+ - name: Merge language and density resources 🧙🏻♂️
+ run: |
+ if ("${{ inputs.arch }}" -eq "x64") {
+ (Start-Process pwsh.exe -NoNewWindow -PassThru -Args "-ExecutionPolicy Bypass -File MakePri.ps1" -WorkingDirectory "${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}").WaitForExit()
+ } else {
+ Copy-Item -Force "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\arm64\makepri.exe" "${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}"
+ }
+
+ - name: Compact Images 💿
+ run: |
+ foreach ($Partition in 'system','product','system_ext','vendor') {
+ Write-Output "Optimizing of $Partition..."
+ Write-Output "SELECT VDISK FILE=`"${{ github.workspace }}\output\${{ needs.build.outputs.artifact_folder }}\$Partition.vhdx`"`
+ ATTACH VDISK READONLY`
+ COMPACT VDISK`
+ DETACH VDISK" | Set-Content -Path "$Partition.txt" -Encoding Ascii
+ Start-Process -NoNewWindow -Wait "diskpart.exe" -Args "/s $Partition.txt" -RedirectStandardOutput NUL
+ }
+
+ - name: Compress artifact for Windows 11 arm64 Build📦
+ run: 7z a -t7z -mx=6 -m0=LZMA2 -ms=on -mmt=8 -- "${{ needs.build.outputs.zipname }}.7z" .\output\*
+
+ - name: File Checksum for Windows 11 arm64 Build✔️
+ id: run
+ run: ("hash=" + $(Get-FileHash -Path ${{ needs.build.outputs.zipname }}.7z -Algorithm SHA256).Hash.ToLower().ToString()) | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding UTF8 -Append
+
+ # - name: Setup rclone 🎚️
+ # uses: AnimMouse/setup-rclone@v1.5.1
+ # with:
+ # rclone_config: ${{ secrets.RCLONE_CONFIG }}
+
+ # - name: Upload build to OneDrive for Windows 11 arm64 Build⏫
+ # run: |
+ # echo ${{ needs.build.outputs.onedrivepath }}
+ # rclone copy ${{ needs.build.outputs.zipname }}.7z OneDrive:"${{ needs.build.outputs.onedrivepath }}" --create-empty-src-dirs
+ # env:
+ # RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }}
+
+ - name: Upload Windows 11 arm64 build to release 🤌
+ uses: softprops/action-gh-release@v1
+ with:
+ files: ${{ needs.build.outputs.zipname }}.7z
+ fail_on_unmatched_files: true
+ append_body: false
+ tag_name: ${{ needs.build.outputs.tag }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+
\ No newline at end of file
diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml
new file mode 100644
index 0000000..5e2cd5e
--- /dev/null
+++ b/.github/workflows/update.yml
@@ -0,0 +1,699 @@
+name: Check update
+on:
+ schedule:
+ - cron: "0 0 * * *"
+ workflow_dispatch:
+
+jobs:
+ check:
+ name: Check updates for components
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout ♻️
+ uses: actions/checkout@v4
+
+ - name: Install Dependencies 🧑🏭
+ run: |
+ pip3 install beautifulsoup4 lxml
+
+ - name: Create branch if not found 🏗️
+ run: |
+ git checkout -f update || git switch --discard-changes --orphan update
+
+ - name: Obtain MagiskOnWSALocal Files ✅
+ run: |
+ git clone https://github.com/LSPosed/MagiskOnWSALocal.git MagiskOnWSALocal1
+ git clone https://github.com/LSPosed/MagiskOnWSALocal.git MagiskOnWSALocal2
+
+ - name: Check Directories and Sub-Directories ☑️
+ run: tree
+
+ - name: Check WSA Insider Version ✅
+ run: |
+ wget https://github.com/MustardChef/test1.0/raw/main/MagiskOnWSA/Update%20Check/WSAInsiderUpdateCheck.py
+ python3 WSAInsiderUpdateCheck.py
+
+ - name: Check WSA Retail Version ☑️
+ run: |
+ wget https://github.com/MustardChef/test1.0/raw/main/MagiskOnWSA/Update%20Check/WSARetailUpdateCheck.py
+ python3 WSARetailUpdateCheck.py
+
+ - name: Check Magisk Stable Version ✅
+ run: |
+ wget https://github.com/MustardChef/test1.0/raw/main/MagiskOnWSA/Update%20Check/MagiskStableUpdateCheck.py
+ python3 MagiskStableUpdateCheck.py
+
+ - name: Check Magisk Canary Version ☑️
+ run: |
+ wget https://github.com/MustardChef/test1.0/raw/main/MagiskOnWSA/Update%20Check/MagiskCanaryUpdateCheck.py
+ python3 MagiskCanaryUpdateCheck.py
+
+ - name: Check KernelSU Version ✅
+ run: |
+ wget https://github.com/MustardChef/test1.0/raw/main/MagiskOnWSA/Update%20Check/KernelSUUpdateCheck.py
+ python3 KernelSUUpdateCheck.py
+
+ - name: Check MindTheGapps Version ☑️
+ run: |
+ wget https://github.com/MustardChef/test1.0/raw/main/MagiskOnWSA/Update%20Check/MTGUpdateCheck.py
+ python3 MTGUpdateCheck.py
+
+ - name: Check GitHub ENVs
+ run: |
+ echo Should Build Execute: ${{ env.SHOULD_BUILD }}
+ echo Release Type: ${{ env.RELEASE_TYPE }}
+ echo WSA Update Message: ${{ env.MSG }}
+ echo Latest WIF Version: ${{ env.LATEST_WIF_VER }}
+ echo Latest Retail Version: ${{ env.LATEST_RETAIL_VER }}
+ echo Insider Update?: ${{ env.INSIDER_UPDATE }}
+ echo Retail Update?: ${{ env.RETAIL_UPDATE }}
+ echo Magisk Canary Update Message: ${{ env.MAGISK_CANARY_MSG }}
+ echo Magisk Stable Update Message: ${{ env.MAGISK_STABLE_MSG }}
+ echo KernelSU Update Message: ${{ env.KERNEL_SU_MSG }}
+ echo MTG Update Message: ${{ env.MTG_MSG }}
+
+
+ - name: Update App version 🔗
+ uses: stefanzweifel/git-auto-commit-action@v5.0.0
+ with:
+ branch: update
+ push_options: '--force'
+ file_pattern: '*.appversion'
+ commit_message: ${{ env.MSG || 'Update App Version' }}
+ create_branch: true
+
+ - name: Delete old workflow run ❌
+ uses: Mattraks/delete-workflow-runs@v2.0.5
+ with:
+ token: ${{ github.token }}
+ repository: ${{ github.repository }}
+ retain_days: 0
+ keep_minimum_runs: 0
+ delete_workflow_pattern: "Check update"
+
+ - name: Checkout Again! 🔄
+ uses: actions/checkout@v4.1.1
+
+ outputs:
+ SHOULD_BUILD: ${{ env.SHOULD_BUILD }}
+ RELEASE_TYPE: ${{ env.RELEASE_TYPE }}
+ WSA_UPDATE_MESSAGE: ${{ env.MSG }}
+ LATEST_WIF_VER: ${{ env.LATEST_WIF_VER }}
+ LATEST_RETAIL_VER: ${{ env.LATEST_RETAIL_VER }}
+ MAGISK_CANARY_MSG: ${{ env.MAGISK_CANARY_MSG }}
+ MAGISK_STABLE_MSG: ${{ env.MAGISK_STABLE_MSG }}
+ KERNEL_SU_MSG: ${{ env.KERNEL_SU_MSG }}
+ MTG_MSG: ${{ env.MTG_MSG }}
+
+
+ update-downloadlinks:
+ name: Update Download Links
+ needs: [check]
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: '3.12'
+
+ - name: Install dependencies
+ run: pip install beautifulsoup4 PyGithub lxml
+
+ - name: Check Release type and get latest version and row/column numbers
+ run: |
+ if [[ "${{ needs.check.outputs.RELEASE_TYPE }}" == "WIF" ]]; then
+ verofwsa=${{ needs.check.outputs.LATEST_WIF_VER }}
+ win11x64_link="
"
+ win11arm64_link="
"
+ win10x64_link="
"
+ else
+ verofwsa=${{ needs.check.outputs.LATEST_RETAIL_VER }}
+ win11x64_link="
"
+ win11arm64_link="
"
+ win10x64_link="
"
+ fi
+ echo "LINK_FOR_W11X64=$win11x64_link" >> $GITHUB_ENV
+ echo "LINK_FOR_W11ARM64=$win11arm64_link" >> $GITHUB_ENV
+ echo "LINK_FOR_W10X64=$win10x64_link" >> $GITHUB_ENV
+ echo "LATEST_VER=$verofwsa" >> $GITHUB_ENV
+ - name: Print environment variables
+ run: |
+ echo "LINK_FOR_W11X64=$LINK_FOR_W11X64"
+ echo "LINK_FOR_W11ARM64=$LINK_FOR_W11ARM64"
+ echo "LINK_FOR_W10X64=$LINK_FOR_W10X64"
+ echo "LATEST_VER=$LATEST_VER"
+ - name: Replace Link in README.md for Download Links Table for the WSA ${{ env.LATEST_VER }} update
+ run: python "./MagiskOnWSA/Update Check/update-downloadlinks.py"
+ env:
+ LINK_FOR_W11X64: ${{ env.LINK_FOR_W11X64 }}
+ LINK_FOR_W11ARM64: ${{ env.LINK_FOR_W11ARM64 }}
+ LINK_FOR_W10X64: ${{ env.LINK_FOR_W10X64 }}
+ RELEASE_TYPE: ${{ needs.check.outputs.RELEASE_TYPE }}
+ LATEST_VER: ${{ env.LATEST_VER }}
+
+ - name: Commit and push if it changed
+ run: |
+ git diff
+ git config --global user.email "68516357+MustardChef@users.noreply.github.com"
+ git config --global user.name "MustardChef"
+ git commit -am "Update Download Links for Update: ${{ env.LATEST_VER }}" || exit 0
+ git pull --rebase origin main
+ git push
+
+ update-downloadvartable:
+ name: Update Download Variant Table
+ runs-on: ubuntu-latest
+ needs: [check, update-downloadlinks]
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: '3.12'
+
+ - name: Install dependencies
+ run: pip install beautifulsoup4 PyGithub
+
+ - name: Check Release type and get latest version and row/column numbers
+ run: |
+ if [[ "${{ needs.check.outputs.RELEASE_TYPE }}" == "WIF" ]]; then
+ verofwsa=${{ needs.check.outputs.LATEST_WIF_VER }}
+ row_num=3
+ column_num=1
+ row_num_fordate=4
+ column_num_fordate=1
+ else
+ verofwsa=${{ needs.check.outputs.LATEST_RETAIL_VER }}
+ row_num=3
+ column_num=2
+ row_num_fordate=4
+ column_num_fordate=2
+ fi
+ echo "ROW_NUMBER=$row_num" >> $GITHUB_ENV
+ echo "COLUMN_NUMBER=$column_num" >> $GITHUB_ENV
+ echo "ROW_NUMBER_FOR_DATE=$row_num_fordate" >> $GITHUB_ENV
+ echo "COLUMN_NUMBER_FOR_DATE=$column_num_fordate" >> $GITHUB_ENV
+ echo "CURRENT_DATE=$(date -u +'%d/%m/%Y')" >> $GITHUB_ENV
+ echo "LATEST_VER=$verofwsa" >> $GITHUB_ENV
+
+ - name: Replace version in README.md for Download Variant Table
+ run: python "./MagiskOnWSA/Update Check/update-downloadvar.py"
+ env:
+ ROW_NUM: ${{ env.ROW_NUMBER }}
+ COLUMN_NUM: ${{ env.COLUMN_NUMBER }}
+ TEXT_TO_REPLACE_WITH: ${{ env.LATEST_VER }}
+
+ - name: Replace Date in README.md for Download Variant Table
+ run: python "./MagiskOnWSA/Update Check/update-downloadvar.py"
+ env:
+ ROW_NUM: ${{ env.ROW_NUMBER_FOR_DATE }}
+ COLUMN_NUM: ${{ env.COLUMN_NUMBER_FOR_DATE }}
+ TEXT_TO_REPLACE_WITH: ${{ env.CURRENT_DATE }}
+
+ - name: Commit and push if it changed
+ run: |
+ git diff
+ git config --global user.email "68516357+MustardChef@users.noreply.github.com"
+ git config --global user.name "MustardChef"
+ git commit -am "Update Download Variant Table for Update: ${{ env.LATEST_VER }}" || exit 0
+ git push
+
+ check-and-create-tag:
+ name: Creates the release tags
+ needs: [check, update-downloadlinks, update-downloadvartable]
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout 🔄
+ uses: actions/checkout@v4.1.1
+
+ - name: Prepare release tag 🏷️
+ id: releasetag
+ shell: bash
+ run: |
+ if [[ "${{ needs.check.outputs.RELEASE_TYPE }}" == "WIF" ]]; then
+ currentver=${{ needs.check.outputs.LATEST_WIF_VER }}
+ elif [[ "${{ needs.check.outputs.RELEASE_TYPE }}" == "retail" ]]; then
+ currentver=${{ needs.check.outputs.LATEST_RETAIL_VER }}
+ fi
+ if [[ -z "$currentver" ]]; then
+ echo "currentver is empty. Please check the file contents."
+ exit 1
+ fi
+ echo "WSA_VER=$currentver" >> $GITHUB_ENV
+ echo "WIN11X64_TAG=Windows_11_$currentver" >> $GITHUB_ENV
+ echo "WIN11ARM64_TAG=Windows_11_${currentver}_arm64" >> $GITHUB_ENV
+ echo "WIN10X64_TAG=Windows_10_$currentver" >> $GITHUB_ENV
+
+ - name: Run Tag Checks for Windows 11 x64 Releases
+ uses: mukunku/tag-exists-action@v1.4.0
+ id: checkTag1
+ with:
+ tag: ${{ env.WIN11X64_TAG }}
+ repo: 'MustardChef/test1.0'
+ - run: echo ${{ steps.checkTag1.outputs.exists }}
+
+ - name: Stop workflow if tag exists
+ if: steps.checkTag.outputs.exists == 'true'
+ run: exit 1
+
+ - name: Run Tag Checks for Windows 11 arm64 Releases
+ uses: mukunku/tag-exists-action@v1.4.0
+ id: checkTag2
+ with:
+ tag: ${{ env.WIN11ARM64_TAG }}
+ repo: 'MustardChef/test1.0'
+ - run: echo ${{ steps.checkTag.outputs.exists }}
+
+ - name: Stop workflow if tag exists
+ if: steps.checkTag2.outputs.exists == 'true'
+ run: exit 1
+
+ - name: Run Tag Checks for Windows 10 x64 Releases
+ uses: mukunku/tag-exists-action@v1.4.0
+ id: checkTag3
+ with:
+ tag: ${{ env.WIN10X64_TAG }}
+ repo: 'MustardChef/test1.0'
+ - run: echo ${{ steps.checkTag.outputs.exists }}
+
+ - name: Stop workflow if tag exists
+ if: steps.checkTag3.outputs.exists == 'true'
+ run: exit 1
+
+ - name: Download Release Notes 📥
+ run: |
+ wget https://gist.github.com/MustardChef/edb0dfc50ab4942cd5914cef6a81602e/raw/ -P ${{ github.workspace }} -O Windows11x64.md
+ wget https://gist.github.com/MustardChef/3ae3343bb98f6e158ce951ec09fd3661/raw/ -P ${{ github.workspace }} -O Windows11arm64.md
+ wget https://gist.github.com/MustardChef/f2ebafde3a3072cac7e6f726da3ffa50/raw/ -P ${{ github.workspace }} -O Windows10x64.md
+ ls
+ env:
+ GITHUB_WORKSPACE: ${{ github.workspace }}
+
+ - name: Update Release Notes for Windows 11 x64 notes📝
+ run: |
+ import os
+ import re
+ from datetime import datetime
+ date = datetime.utcnow().strftime('%d/%m/%Y')
+ time = datetime.utcnow().strftime('%H:%M:%S')
+ file_path = os.path.join(os.environ['GITHUB_WORKSPACE'], 'Windows11x64.md')
+ with open(file_path, 'r') as file:
+ file_data = file.read()
+ def custom_escape(string):
+ return string.replace('\\', '')
+ file_data = re.sub('<>', date, file_data)
+ file_data = re.sub('<>', time, file_data)
+ file_data = re.sub('<>', 'Initial Release', file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['WSA_UPDATE_MESSAGE']), file_data)
+ file_data = re.sub('<>', 'Android 13', file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MTG_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MAGISK_CANARY_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MAGISK_STABLE_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['KERNEL_SU_MSG']), file_data)
+ with open(file_path, 'w') as file:
+ file.write(file_data)
+ shell: python
+ env:
+ GITHUB_WORKSPACE: ${{ github.workspace }}
+ WSA_UPDATE_MESSAGE: ${{ needs.check.outputs.WSA_UPDATE_MESSAGE }}
+ MTG_MSG: ${{ needs.check.outputs.MTG_MSG }}
+ MAGISK_CANARY_MSG: ${{ needs.check.outputs.MAGISK_CANARY_MSG }}
+ MAGISK_STABLE_MSG: ${{ needs.check.outputs.MAGISK_STABLE_MSG }}
+ KERNEL_SU_MSG: ${{ needs.check.outputs.KERNEL_SU_MSG }}
+
+ - name: Update Release Notes for Windows 11 arm64 notes📝
+ run: |
+ import os
+ import re
+ from datetime import datetime
+ date = datetime.utcnow().strftime('%d/%m/%Y')
+ time = datetime.utcnow().strftime('%H:%M:%S')
+ file_path = os.path.join(os.environ['GITHUB_WORKSPACE'], 'Windows11arm64.md')
+ with open(file_path, 'r') as file:
+ file_data = file.read()
+ def custom_escape(string):
+ return string.replace('\\', '')
+ file_data = re.sub('<>', date, file_data)
+ file_data = re.sub('<>', time, file_data)
+ file_data = re.sub('<>', 'Initial Release', file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['WSA_UPDATE_MESSAGE']), file_data)
+ file_data = re.sub('<>', 'Android 13', file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MTG_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MAGISK_CANARY_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MAGISK_STABLE_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['KERNEL_SU_MSG']), file_data)
+ with open(file_path, 'w') as file:
+ file.write(file_data)
+ shell: python
+ env:
+ GITHUB_WORKSPACE: ${{ github.workspace }}
+ WSA_UPDATE_MESSAGE: ${{ needs.check.outputs.WSA_UPDATE_MESSAGE }}
+ MTG_MSG: ${{ needs.check.outputs.MTG_MSG }}
+ MAGISK_CANARY_MSG: ${{ needs.check.outputs.MAGISK_CANARY_MSG }}
+ MAGISK_STABLE_MSG: ${{ needs.check.outputs.MAGISK_STABLE_MSG }}
+ KERNEL_SU_MSG: ${{ needs.check.outputs.KERNEL_SU_MSG }}
+
+ - name: Update Release Notes for Windows 10 x64 notes📝
+ run: |
+ import os
+ import re
+ from datetime import datetime
+ date = datetime.utcnow().strftime('%d/%m/%Y')
+ time = datetime.utcnow().strftime('%H:%M:%S')
+ file_path = os.path.join(os.environ['GITHUB_WORKSPACE'], 'Windows10x64.md')
+ with open(file_path, 'r') as file:
+ file_data = file.read()
+ def custom_escape(string):
+ return string.replace('\\', '')
+ file_data = re.sub('<>', date, file_data)
+ file_data = re.sub('<>', time, file_data)
+ file_data = re.sub('<>', 'Initial Release', file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['WSA_UPDATE_MESSAGE']), file_data)
+ file_data = re.sub('<>', 'Android 13', file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MTG_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MAGISK_CANARY_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['MAGISK_STABLE_MSG']), file_data)
+ file_data = re.sub('<>', custom_escape(os.environ['KERNEL_SU_MSG']), file_data)
+ with open(file_path, 'w') as file:
+ file.write(file_data)
+ shell: python
+ env:
+ GITHUB_WORKSPACE: ${{ github.workspace }}
+ WSA_UPDATE_MESSAGE: ${{ needs.check.outputs.WSA_UPDATE_MESSAGE }}
+ MTG_MSG: ${{ needs.check.outputs.MTG_MSG }}
+ MAGISK_CANARY_MSG: ${{ needs.check.outputs.MAGISK_CANARY_MSG }}
+ MAGISK_STABLE_MSG: ${{ needs.check.outputs.MAGISK_STABLE_MSG }}
+ KERNEL_SU_MSG: ${{ needs.check.outputs.KERNEL_SU_MSG }}
+
+ - name: Create Tag and Release for Windows 11 arm64 release ✍🏼
+ uses: softprops/action-gh-release@v1
+ with:
+ tag_name: ${{ env.WIN11ARM64_TAG }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+ body_path: ${{github.workspace}}/Windows11arm64.md
+ name: Windows Subsystem For Android ${{ env.WSA_VER }} for Windows 11 arm64
+ env:
+ GITHUB_WORKSPACE: ${{ github.workspace }}
+
+ - name: Create Tag and Release for Windows 10 x64 release ✍🏼
+ uses: softprops/action-gh-release@v1
+ with:
+ tag_name: ${{ env.WIN10X64_TAG }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+ body_path: ${{github.workspace}}/Windows10x64.md
+ name: Windows Subsystem For Android ${{ env.WSA_VER }} for Windows 10 x64
+ env:
+ GITHUB_WORKSPACE: ${{ github.workspace }}
+
+ - name: Create Tag and Release for Windows 11 x64 release ✍🏼
+ uses: softprops/action-gh-release@v1
+ with:
+ tag_name: ${{ env.WIN11X64_TAG }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+ body_path: ${{github.workspace}}/Windows11x64.md
+ name: Windows Subsystem For Android ${{ env.WSA_VER }} for Windows 11 x64
+ env:
+ GITHUB_WORKSPACE: ${{ github.workspace }}
+
+ build_x64_no_root_gapps_remove_amazon_redfin:
+ name: Build for x64 as Redfin with No Root, GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/build.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: x64
+ root: none
+ gapps: MindTheGapps
+ amazonflag: --remove-amazon
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_x64_no_root_gapps_redfin:
+ name: Build for x64 as Redfin with No Root, GApps
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/build.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: x64
+ root: none
+ gapps: MindTheGapps
+ amazonflag:
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_x64_no_root_no_gapps_remove_amazon_redfin:
+ name: Build for x64 as Redfin with No Root, No GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/build.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: x64
+ root: none
+ gapps: none
+ amazonflag: --remove-amazon
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_x64_no_root_no_gapps_redfin:
+ name: Build for x64 as Redfin with No Root, No GApps
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/build.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: x64
+ root: none
+ gapps: none
+ amazonflag:
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_x64_kernelsu_gapps_remove_amazon_redfin:
+ name: Build for x64 as Redfin with KernelSU, GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/build.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: x64
+ root: kernelsu
+ gapps: MindTheGapps
+ amazonflag: --remove-amazon
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_x64_magisk_gapps_redfin:
+ name: Build for x64 as Redfin with Magisk, GApps
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/build.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: x64
+ root: magisk
+ gapps: MindTheGapps
+ amazonflag:
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_x64_magisk_no_gapps_remove_amazon_redfin:
+ name: Build for x64 as Redfin with Magisk, No GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/build.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: x64
+ root: magisk
+ gapps: none
+ amazonflag: --remove-amazon
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_x64_magisk_canary_gapps_remove_amazon_redfin:
+ name: Build for x64 as Redfin with Magisk Canary, GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/build.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: x64
+ root: magisk
+ gapps: MindTheGapps
+ amazonflag: --remove-amazon
+ magiskver: canary
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_arm64_no_root_gapps_remove_amazon_redfin:
+ name: Build for arm64 as Redfin with No Root, GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/buildarm64.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: arm64
+ root: none
+ gapps: MindTheGapps
+ amazonflag: --remove-amazon
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_arm64_no_root_gapps_redfin:
+ name: Build for arm64 as Redfin with No Root, GApps
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/buildarm64.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: arm64
+ root: none
+ gapps: MindTheGapps
+ amazonflag:
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_arm64_no_root_no_gapps_remove_amazon_redfin:
+ name: Build for arm64 as Redfin with No Root, No GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/buildarm64.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: arm64
+ root: none
+ gapps: none
+ amazonflag: --remove-amazon
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_arm64_no_root_no_gapps_redfin:
+ name: Build for arm64 as Redfin with No Root, No GApps
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/buildarm64.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: arm64
+ root: none
+ gapps: none
+ amazonflag:
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_arm64_kernelsu_gapps_remove_amazon_redfin:
+ name: Build for arm64 as Redfin with KernelSU, GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/buildarm64.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: arm64
+ root: kernelsu
+ gapps: MindTheGapps
+ amazonflag: --remove-amazon
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_arm64_magisk_gapps_redfin:
+ name: Build for arm64 as Redfin with Magisk, GApps
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/buildarm64.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: arm64
+ root: magisk
+ gapps: MindTheGapps
+ amazonflag:
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_arm64_magisk_no_gapps_remove_amazon_redfin:
+ name: Build for arm64 as Redfin with Magisk, No GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/buildarm64.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: arm64
+ root: magisk
+ gapps: none
+ amazonflag: --remove-amazon
+ magiskver: stable
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+ build_arm64_magisk_canary_gapps_remove_amazon_redfin:
+ name: Build for arm64 as Redfin with Magisk Canary, GApps and No Amazon Appstore
+ permissions: write-all
+ needs: [check, check-and-create-tag, update-downloadlinks, update-downloadvartable]
+ uses: ./.github/workflows/buildarm64.yml
+ if: needs.check.outputs.SHOULD_BUILD == 'yes'
+ with:
+ arch: arm64
+ root: magisk
+ gapps: MindTheGapps
+ amazonflag: --remove-amazon
+ magiskver: canary
+ devicemodel: redfin
+ compressformat: zip
+ release_type: ${{ needs.check.outputs.RELEASE_TYPE }}
+ secrets: inherit
+
+
+
\ No newline at end of file
diff --git a/MagiskOnWSA/.gitattributes b/MagiskOnWSA/.gitattributes
new file mode 100644
index 0000000..19ca178
--- /dev/null
+++ b/MagiskOnWSA/.gitattributes
@@ -0,0 +1,10 @@
+* text eol=lf merge=theirs
+
+*.bat text eol=crlf
+*.ps1 text eol=crlf
+
+*.exe binary
+*.dll binary
+*.erofs binary
+linker64 binary
+*.so binary
diff --git a/MagiskOnWSA/DLL/README.md b/MagiskOnWSA/DLL/README.md
new file mode 100644
index 0000000..73f8782
--- /dev/null
+++ b/MagiskOnWSA/DLL/README.md
@@ -0,0 +1,3 @@
+# WSAPatch
+
+
diff --git a/MagiskOnWSA/DLL/WsaPatch.dll b/MagiskOnWSA/DLL/WsaPatch.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6e0e3a5ae0a5d9a67442983e24632bce6680f73f
GIT binary patch
literal 64000
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
literal 0
HcmV?d00001
diff --git a/MagiskOnWSA/DLL/icu.dll b/MagiskOnWSA/DLL/icu.dll
new file mode 100644
index 0000000000000000000000000000000000000000..42a05f1471208239cddc70231ed09858a608392a
GIT binary patch
literal 2579728
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