From 8671b52cbb8772e293ceac2e745231bf92d6c4ae Mon Sep 17 00:00:00 2001 From: MrZ626 <1046101471@qq.com> Date: Sat, 21 Aug 2021 01:15:14 +0800 Subject: [PATCH] Update CI Co-authored-by: scdhh <51957264+shoucandanghehe@users.noreply.github.com> --- .github/workflows/build.yml | 73 ++++++++++----- .github/workflows/release.yml | 146 +++++++++++++++++++---------- .github/workflows/updateVersion.py | 65 +++++++++---- build/macOS/icon_snapshot.icns | Bin 0 -> 24275 bytes build/macOS/info.plist.template | 2 +- 5 files changed, 194 insertions(+), 92 deletions(-) create mode 100644 build/macOS/icon_snapshot.icns diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 56fc67aa..af7c94db 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -63,7 +63,7 @@ jobs: python .\.github\workflows\updateVersion.py -T Windows -N ${{ env.Version }} cmd /c '.\ResourceHacker.exe -open .\love-11.3-win64\Techmino.exe -save .\love-11.3-win64\Techmino.exe -action delete -mask ICONGROUP,,' cmd /c '.\ResourceHacker.exe -open .\Techmino.rc -save .\Techmino.res -action compile' - cmd /c '.\ResourceHacker.exe -open .\love-11.3-win64\Techmino.exe -save .\love-11.3-win64\Techmino.exe -action addoverwrite -res ".\build\Windows\icon.ico" -mask ICONGROUP,1,' + cmd /c '.\ResourceHacker.exe -open .\love-11.3-win64\Techmino.exe -save .\love-11.3-win64\Techmino.exe -action addoverwrite -res ".\build\Windows\icon_snapshot.ico" -mask ICONGROUP,1,' cmd /c '.\ResourceHacker.exe -open .\love-11.3-win64\Techmino.exe -save .\love-11.3-win64\Techmino.exe -action addoverwrite -res ".\Techmino.res" -mask VERSIONINFO,1,' - name: Upload uses: actions/upload-artifact@v2 @@ -131,11 +131,14 @@ jobs: name: Techmino_${{ env.Version }}_${{ GITHUB.RUN_NUMBER }}_${{ env.CommitID }}_Linux path: Techmino.AppImage - #Android待更新 build-android: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'adopt' + java-version: '8' - name: Install lua run: | sudo apt-get update -y @@ -155,33 +158,53 @@ jobs: - name: Update Version run: | python3 ./.github/workflows/updateVersion.py -T Version -H ${{ env.CommitID }} - - name: Download Apktool - run: curl -OL https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.5.0.jar - - name: Unpack and Repack + - name: Clone love-android run: | - curl -OL https://github.com/26F-Studio/Techmino/releases/download/v0.15.1/Techmino.apk - java -jar ./apktool_2.5.0.jar d -s -o apk ./Techmino.apk - 7z x ./apk/assets/game.love libAndroid -o. - rm -rf ./apk/assets/game.love ./Techmino.apk - 7z a -tzip ./apk/assets/game.love ./document ./libAndroid ./media ./parts ./Zframework ./conf.lua ./font.ttf ./main.lua ./version.lua - python3 ./.github/workflows/updateVersion.py -T Android -C $(lua ./.github/workflows/getVersion.lua -code) -N ${{ env.Version }} - java -jar ./apktool_2.5.0.jar b -o apk ./Techmino.apk - - uses: 26F-Studio/sign-android-release@master - name: Sign APK - id: sign_app - with: - releaseDirectory: ./Techmino.apk - signingKeyBase64: ${{ secrets.SIGNING_KEY }} - alias: ${{ secrets.ALIAS }} - keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} - keyPassword: ${{ secrets.KEY_PASSWORD }} - env: - BUILD_TOOLS_VERSION: "30.0.2" + git clone --recurse-submodules https://github.com/26F-Studio/love-android + cd ./love-android + git checkout --recurse-submodules CI + - name: Download androidSDK + run: | + wget -O commandlinetools.zip https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip + - name: Unpack androidSDK + run: | + unzip ./commandlinetools.zip + - name: Install SDK NDK + run: | + yes | ./cmdline-tools/bin/sdkmanager --sdk_root=. --install "platforms;android-30" + yes | ./cmdline-tools/bin/sdkmanager --sdk_root=. --install "ndk;21.3.6528147" + export ANDROID_HOME=$(pwd) + - name: Download ColdClear + run: | + curl -OL https://github.com/26F-Studio/cold_clear_ai_love2d_wrapper/releases/download/latest/android_aarch64.zip + curl -OL https://github.com/26F-Studio/cold_clear_ai_love2d_wrapper/releases/download/latest/android_armv7.zip + - name: Unpack ColdClear + run: | + 7z x ./android_aarch64.zip -oColdClear/android_aarch64 + 7z x ./android_armv7.zip -oColdClear/android_armv7 + - name: Pack Techmino + run: | + mkdir -p ./love-android/app/src/main/assets + mkdir -p ./love-android/app/libs/arm64-v8a + mkdir -p ./love-android/app/libs/armeabi-v7a + mv ./ColdClear/android_aarch64/love-11.3-android/lib/arm64-v8a/libcold_clear.so ./love-android/app/libs/arm64-v8a + mv ./ColdClear/android_armv7/love-11.3-android/lib/armeabi-v7a/libcold_clear.so ./love-android/app/libs/armeabi-v7a + mkdir -p ./libAndroid/arm64-v8a + mkdir -p ./libAndroid/armeabi-v7a + mv ./ColdClear/android_aarch64/libs/arm64-v8a/libCCloader.so ./libAndroid/arm64-v8a + mv ./ColdClear/android_armv7/libs/armeabi-v7a/libCCloader.so ./libAndroid/armeabi-v7a + 7z a -tzip ./love-android/app/src/main/assets/game.love ./document ./media ./parts ./Zframework ./libAndroid ./conf.lua ./font.ttf ./main.lua ./version.lua + echo "${{ secrets.SIGNING_KEY }}" | base64 -d > ./love-android/app/android.keystore + python3 ./.github/workflows/updateVersion.py -T AndroidSnapshot -C $(lua ./.github/workflows/getVersion.lua -code) -N ${{ env.Version }} -S ${{ secrets.KEY_STORE_PASSWORD }} -A ${{ secrets.ALIAS }} -K ${{ secrets.KEY_PASSWORD }} + chmod 777 ./love-android/gradlew + cd ./love-android/ + ./gradlew assembleRelease + mv ./app/build/outputs/apk/release/app-release.apk ./app/build/outputs/apk/release/Techmino_Snapshot.apk - name: Upload uses: actions/upload-artifact@v2 with: name: Techmino_${{ env.Version }}_${{ GITHUB.RUN_NUMBER }}_${{ env.CommitID }}_Android - path: ${{steps.sign_app.outputs.signedReleaseFile}} + path: ./love-android/app/build/outputs/apk/release/Techmino_Snapshot.apk build-macOS: runs-on: macos-10.15 @@ -221,6 +244,8 @@ jobs: run: | python3 ./.github/workflows/updateVersion.py -T macOS -N ${{ env.Version }} mv ./Techmino.love ./Techmino.app/Contents/Resources + rm -rf ./Techmino.app/Contents/Resources/iconfile.icns + mv ./build/macOS/icon_snapshot.icns ./Techmino.app/Contents/Resources/iconfile.icns - name: Codesign executable # In secrets: # - MACOS_CERTIFICATE: the *.p12 Developer ID Certificate, encoded in base64 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f5f50bcf..1dba1aef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -191,11 +191,14 @@ jobs: name: ${{ env.Title }} files: Techmino.a${{ env.Version }}.AppImage - #Android待更新 build-android: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'adopt' + java-version: '8' - name: Install lua run: | sudo apt-get update -y @@ -212,39 +215,62 @@ jobs: run: | Title=$(lua ./.github/workflows/getVersion.lua -updateTitle) echo "Title=${Title}" >> $GITHUB_ENV - - name: Download Apktool - run: curl -OL https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.5.0.jar - - name: Unpack and Repack + - name: Clone love-android run: | - curl -OL https://github.com/26F-Studio/Techmino/releases/download/v0.15.1/Techmino.apk - java -jar ./apktool_2.5.0.jar d -s -o apk ./Techmino.apk - 7z x ./apk/assets/game.love libAndroid -o. - rm -rf ./apk/assets/game.love ./Techmino.apk - 7z a -tzip ./apk/assets/game.love ./document ./libAndroid ./media ./parts ./Zframework ./conf.lua ./font.ttf ./main.lua ./version.lua - python3 ./.github/workflows/updateVersion.py -T Android -C $(lua ./.github/workflows/getVersion.lua -code) -N $(lua ./.github/workflows/getVersion.lua -name) - java -jar ./apktool_2.5.0.jar b -o apk ./Techmino.a${{ env.Version }}.apk - - uses: 26F-Studio/sign-android-release@master - name: Sign APK - id: sign_app - with: - releaseDirectory: ./Techmino.a${{ env.Version }}.apk - signingKeyBase64: ${{ secrets.SIGNING_KEY }} - alias: ${{ secrets.ALIAS }} - keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} - keyPassword: ${{ secrets.KEY_PASSWORD }} - env: - BUILD_TOOLS_VERSION: "30.0.2" + git clone --recurse-submodules https://github.com/26F-Studio/love-android + cd ./love-android + git checkout --recurse-submodules CI + - name: Download androidSDK + run: | + wget -O commandlinetools.zip https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip + - name: Unpack androidSDK + run: | + unzip ./commandlinetools.zip + - name: Install SDK NDK + run: | + yes | ./cmdline-tools/bin/sdkmanager --sdk_root=. --install "platforms;android-30" + yes | ./cmdline-tools/bin/sdkmanager --sdk_root=. --install "ndk;21.3.6528147" + export ANDROID_HOME=$(pwd) + - name: Download ColdClear + run: | + curl -OL https://github.com/26F-Studio/cold_clear_ai_love2d_wrapper/releases/download/latest/android_aarch64.zip + curl -OL https://github.com/26F-Studio/cold_clear_ai_love2d_wrapper/releases/download/latest/android_armv7.zip + - name: Unpack ColdClear + run: | + 7z x ./android_aarch64.zip -oColdClear/android_aarch64 + 7z x ./android_armv7.zip -oColdClear/android_armv7 + - name: Pack Techmino + run: | + mkdir -p ./love-android/app/src/main/assets + mkdir -p ./love-android/app/libs/arm64-v8a + mkdir -p ./love-android/app/libs/armeabi-v7a + mv ./ColdClear/android_aarch64/love-11.3-android/lib/arm64-v8a/libcold_clear.so ./love-android/app/libs/arm64-v8a + mv ./ColdClear/android_armv7/love-11.3-android/lib/armeabi-v7a/libcold_clear.so ./love-android/app/libs/armeabi-v7a + mkdir -p ./libAndroid/arm64-v8a + mkdir -p ./libAndroid/armeabi-v7a + mv ./ColdClear/android_aarch64/libs/arm64-v8a/libCCloader.so ./libAndroid/arm64-v8a + mv ./ColdClear/android_armv7/libs/armeabi-v7a/libCCloader.so ./libAndroid/armeabi-v7a + 7z a -tzip ./love-android/app/src/main/assets/game.love ./document ./media ./parts ./Zframework ./libAndroid ./conf.lua ./font.ttf ./main.lua ./version.lua + echo "${{ secrets.SIGNING_KEY }}" | base64 -d > ./love-android/app/android.keystore + python3 ./.github/workflows/updateVersion.py -T AndroidRelease -C $(lua ./.github/workflows/getVersion.lua -code) -N $(lua ./.github/workflows/getVersion.lua -name) -S ${{ secrets.KEY_STORE_PASSWORD }} -A ${{ secrets.ALIAS }} -K ${{ secrets.KEY_PASSWORD }} + chmod 777 ./love-android/gradlew + cd ./love-android/ + ./gradlew assembleRelease + mv ./app/build/outputs/apk/release/app-release.apk ./app/build/outputs/apk/release/Techmino.a${{ env.Version }}.apk - name: Release uses: softprops/action-gh-release@v1 with: name: ${{ env.Title }} - files: ${{steps.sign_app.outputs.signedReleaseFile}} + files: ./love-android/app/build/outputs/apk/release/Techmino.a${{ env.Version }}.apk - #Android-mini待更新 build-android-mini: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'adopt' + java-version: '8' - name: Install lua run: | sudo apt-get update -y @@ -261,34 +287,54 @@ jobs: run: | Title=$(lua ./.github/workflows/getVersion.lua -updateTitle) echo "Title=${Title}" >> $GITHUB_ENV - - name: Download Apktool - run: curl -OL https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.5.0.jar - - name: Unpack and Repack + - name: Clone love-android run: | - curl -OL https://github.com/26F-Studio/Techmino/releases/download/v0.15.1/Techmino.apk - java -jar ./apktool_2.5.0.jar d -s -o apk ./Techmino.apk - 7z x ./apk/assets/game.love libAndroid -o. - rm -rf ./apk/assets/game.love ./Techmino.apk + git clone --recurse-submodules https://github.com/26F-Studio/love-android + cd ./love-android + git checkout --recurse-submodules CI + - name: Download androidSDK + run: | + wget -O commandlinetools.zip https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip + - name: Unpack androidSDK + run: | + unzip ./commandlinetools.zip + - name: Install SDK NDK + run: | + yes | ./cmdline-tools/bin/sdkmanager --sdk_root=. --install "platforms;android-30" + yes | ./cmdline-tools/bin/sdkmanager --sdk_root=. --install "ndk;21.3.6528147" + export ANDROID_HOME=$(pwd) + - name: Download ColdClear + run: | + curl -OL https://github.com/26F-Studio/cold_clear_ai_love2d_wrapper/releases/download/latest/android_aarch64.zip + curl -OL https://github.com/26F-Studio/cold_clear_ai_love2d_wrapper/releases/download/latest/android_armv7.zip + - name: Unpack ColdClear + run: | + 7z x ./android_aarch64.zip -oColdClear/android_aarch64 + 7z x ./android_armv7.zip -oColdClear/android_armv7 + - name: Pack Techmino + run: | + mkdir -p ./love-android/app/src/main/assets + mkdir -p ./love-android/app/libs/arm64-v8a + mkdir -p ./love-android/app/libs/armeabi-v7a + mv ./ColdClear/android_aarch64/love-11.3-android/lib/arm64-v8a/libcold_clear.so ./love-android/app/libs/arm64-v8a + mv ./ColdClear/android_armv7/love-11.3-android/lib/armeabi-v7a/libcold_clear.so ./love-android/app/libs/armeabi-v7a + mkdir -p ./libAndroid/arm64-v8a + mkdir -p ./libAndroid/armeabi-v7a + mv ./ColdClear/android_aarch64/libs/arm64-v8a/libCCloader.so ./libAndroid/arm64-v8a + mv ./ColdClear/android_armv7/libs/armeabi-v7a/libCCloader.so ./libAndroid/armeabi-v7a rm -rf ./media/BGM ./media/SFX ./media/VOICE - 7z a -tzip ./apk/assets/game.love ./document ./libAndroid ./media ./parts ./Zframework ./conf.lua ./font.ttf ./main.lua ./version.lua - python3 ./.github/workflows/updateVersion.py -T Android -C $(lua ./.github/workflows/getVersion.lua -code) -N $(lua ./.github/workflows/getVersion.lua -name) - java -jar ./apktool_2.5.0.jar b -o apk ./Techmino.a${{ env.Version }}.mini.apk - - uses: 26F-Studio/sign-android-release@master - name: Sign APK - id: sign_app - with: - releaseDirectory: ./Techmino.a${{ env.Version }}.mini.apk - signingKeyBase64: ${{ secrets.SIGNING_KEY }} - alias: ${{ secrets.ALIAS }} - keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} - keyPassword: ${{ secrets.KEY_PASSWORD }} - env: - BUILD_TOOLS_VERSION: "30.0.2" + 7z a -tzip ./love-android/app/src/main/assets/game.love ./document ./media ./parts ./Zframework ./libAndroid ./conf.lua ./font.ttf ./main.lua ./version.lua + echo "${{ secrets.SIGNING_KEY }}" | base64 -d > ./love-android/app/android.keystore + python3 ./.github/workflows/updateVersion.py -T AndroidRelease -C $(lua ./.github/workflows/getVersion.lua -code) -N $(lua ./.github/workflows/getVersion.lua -name) -S ${{ secrets.KEY_STORE_PASSWORD }} -A ${{ secrets.ALIAS }} -K ${{ secrets.KEY_PASSWORD }} + chmod 777 ./love-android/gradlew + cd ./love-android/ + ./gradlew assembleRelease + mv ./app/build/outputs/apk/release/app-release.apk ./app/build/outputs/apk/release/Techmino.a${{ env.Version }}.mini.apk - name: Release uses: softprops/action-gh-release@v1 with: name: ${{ env.Title }} - files: ${{steps.sign_app.outputs.signedReleaseFile}} + files: ./love-android/app/build/outputs/apk/release/Techmino.a${{ env.Version }}.mini.apk build-macOS: runs-on: macos-10.15 @@ -368,6 +414,7 @@ jobs: - name: Get ReleaseTitle run: | Title=$(lua ./.github/workflows/getVersion.lua -updateTitle) + echo "Title=${Title}" >> $GITHUB_ENV - name: Pack Techmino run: | 7z a -tzip ./Techmino.a${{ env.Version }}.love ./document ./media ./parts ./Zframework ./conf.lua ./font.ttf ./main.lua ./version.lua @@ -388,14 +435,13 @@ jobs: sudo apt-get install lua5.3 -y - name: Get ReleaseTitle run: | - Title=lua ./.github/workflows/getVersion.lua -updateTitle + Title=$(lua ./.github/workflows/getVersion.lua -updateTitle) echo "Title=${Title}" >> $GITHUB_ENV - name: Get ReleaseNote run: | - Note=lua ./.github/workflows/getVersion.lua -updateNote - echo "Note=${Note}" >> $GITHUB_ENV + lua ./.github/workflows/getVersion.lua -updateNote > updateNote.txt - name: Release uses: softprops/action-gh-release@v1 with: name: ${{ env.Title }} - body: ${{ env.Note }} \ No newline at end of file + body_path: ./updateNote.txt \ No newline at end of file diff --git a/.github/workflows/updateVersion.py b/.github/workflows/updateVersion.py index bc47dba1..397981dc 100644 --- a/.github/workflows/updateVersion.py +++ b/.github/workflows/updateVersion.py @@ -14,7 +14,6 @@ def updateVersion(args): #更新版本号 data = file.read() if args.Hash != False: data = data.replace('@DEV', f'@{args.Hash[0:4]}') - updateConf() else: data = data.replace('@DEV', '') file.seek(0) @@ -24,25 +23,52 @@ def updateVersion(args): #更新版本号 def updateMacOS(args): #更新macOS打包信息 import datetime - with open('./build/macOS/info.plist.template', 'r', encoding='utf-8') as template: - template = ((template.read()).replace('@versionName', args.Name)).replace('@ThisYear', str(datetime.datetime.today().year)) - with open('./Techmino.app/Contents/info.plist', 'w+', encoding='utf-8') as file: - file.write(template) + thisYear = str(datetime.datetime.today().year) + with open('./build/macOS/info.plist.template', 'r', encoding='utf-8') as file: + data = file.read() + data = data\ + .replace('@versionName', args.Name)\ + .replace('@thisYear', thisYear) + with open('./Techmino.app/Contents/info.plist', 'w+', encoding='utf-8') as file: + file.write(data) def updateWindows(args): #更新Windows打包信息 Version = (args.Name).replace('V', '') FileVersion = (f"{Version.replace('.', ',')},0") - with open('./build/Windows/Techmino.rc.template', 'r', encoding='utf8') as templace: - template = ((templace.read()).replace('@FileVersion', FileVersion)).replace('@Version', Version) - with open('Techmino.rc', 'w+', encoding='utf8') as file: - file.write(template) - -def updateAndroid(args): #更新Android打包信息 - import re - with open('./apk/apktool.yml', 'r+', encoding='utf-8') as file: + with open('./build/Windows/Techmino.rc.template', 'r', encoding='utf8') as file: data = file.read() - data = re.sub("versionCode:.+", f"versionCode: '{args.Code}'", data) - data = re.sub("versionName:.+", f"versionName: '{args.Name}'", data) + data = data\ + .replace('@FileVersion', FileVersion)\ + .replace('@Version', Version) + with open('Techmino.rc', 'w+', encoding='utf8') as file: + file.write(data) + +def updateAndroid(args, edition): #更新Android打包信息 + if edition == 'Release': + appName = 'Techmino' + packageName = 'org.love2d.MrZ.Techmino' + edition = 'release' + elif edition == 'Snapshot': + appName = 'Techmino_Snapshot' + packageName = 'org.love2d.MrZ.Techmino.Snapshot' + edition = 'snapshot' + with open('./love-android/app/src/main/AndroidManifest.xml', "r+", encoding='utf-8') as file: + data = file.read() + data = data\ + .replace('@appName', appName)\ + .replace('@edition', edition) + file.seek(0) + file.truncate() + file.write(data) + with open("./love-android/app/build.gradle", "r+", encoding='utf-8') as file: + data = file.read() + data = data\ + .replace('@packageName', packageName)\ + .replace('@versionCode', args.Code)\ + .replace('@versionName', args.Name)\ + .replace('@storePassword', args.Store)\ + .replace('@keyAlias', args.Alias)\ + .replace('@keyPassword', args.Key) file.seek(0) file.truncate() file.write(data) @@ -53,6 +79,9 @@ if __name__ == '__main__': parser.add_argument('-H', '--Hash', type=str, default = False, help = 'Github提交Hash') parser.add_argument('-C', '--Code', type=str, default = False, help = 'versionCode') parser.add_argument('-N', '--Name', type=str, default = False, help = 'versionName') + parser.add_argument('-S', '--Store', type=str, default = False, help = 'storePassword') + parser.add_argument('-A', '--Alias', type=str, default = False, help = 'keyAlias') + parser.add_argument('-K', '--Key', type=str, default = False, help = 'keyPassword') args = parser.parse_args() if args.Type == 'Conf': updateConf() @@ -62,5 +91,7 @@ if __name__ == '__main__': updateWindows(args) elif args.Type == 'macOS': updateMacOS(args) - elif args.Type == 'Android': - updateAndroid(args) \ No newline at end of file + elif args.Type == 'AndroidRelease': + updateAndroid(args, 'Release') + elif args.Type == 'AndroidSnapshot': + updateAndroid(args, 'Snapshot') \ No newline at end of file diff --git a/build/macOS/icon_snapshot.icns b/build/macOS/icon_snapshot.icns new file mode 100644 index 0000000000000000000000000000000000000000..d6c38d3842b918906354f9931e836fe173843f95 GIT binary patch literal 24275 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 literal 0 HcmV?d00001 diff --git a/build/macOS/info.plist.template b/build/macOS/info.plist.template index 44b90389..3a8ee729 100644 --- a/build/macOS/info.plist.template +++ b/build/macOS/info.plist.template @@ -47,7 +47,7 @@ NSHighResolutionCapable NSHumanReadableCopyright - ©2020-@ThisYear 26F Studio, GNU LGPLv3.0 + ©2020-@thisYear 26F Studio, GNU LGPLv3.0 NSPrincipalClass NSApplication NSSupportsAutomaticGraphicsSwitching