初步实现宝石匹配 #1612
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Techmino Galaxy CI | |
| on: | |
| push: | |
| branches: [main, ci*] | |
| tags: [pre*, v*] | |
| pull_request: | |
| branches: [main] | |
| env: | |
| BUILD_TYPE: ${{ fromJSON('["dev", "release"]')[startsWith(github.ref, 'refs/tags/v')] }} | |
| CORE_LOVE_PACKAGE_PATH: ./core.love | |
| CORE_LOVE_ARTIFACT_NAME: core_love_package | |
| jobs: | |
| get-info: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| app-name: ${{ steps.app-info.outputs.app-name }} | |
| version-name: ${{ steps.app-info.outputs.version-name }} | |
| version-string: ${{ steps.app-info.outputs.version-string }} | |
| version-code: ${{ steps.app-info.outputs.version-code }} | |
| commit-hash: ${{ steps.git-info.outputs.commit-hash }} | |
| base-name: ${{ steps.assemble-base-name.outputs.base-name }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install lua | |
| run: | | |
| sudo apt-get install lua5.3 -y | |
| - name: Get app info | |
| id: app-info | |
| shell: lua {0} | |
| run: | | |
| local version = require "version" | |
| os.execute('echo "app-name=' .. version.appName .. '" >> $GITHUB_OUTPUT') | |
| os.execute('echo "version-name=' .. version.appVer .. '" >> $GITHUB_OUTPUT') | |
| os.execute('echo "version-string=' .. version.verStr .. '" >> $GITHUB_OUTPUT') | |
| os.execute('echo "version-code=' .. tostring(version.apkCode) .. '" >> $GITHUB_OUTPUT') | |
| - name: Get git info | |
| id: git-info | |
| shell: bash | |
| run: | | |
| COMMIT_HASH=$(git rev-parse --short ${{ GITHUB.SHA }}) | |
| echo "commit-hash=$COMMIT_HASH" >> $GITHUB_OUTPUT | |
| - name: Assemble package base name | |
| id: assemble-base-name | |
| shell: bash | |
| run: | | |
| BASE_NAME=Techmino_Galaxy_${{ steps.app-info.outputs.version-string }}_${{ steps.git-info.outputs.commit-hash }}_#${{ GITHUB.RUN_NUMBER }} | |
| echo "base-name=$BASE_NAME" >> $GITHUB_OUTPUT | |
| build-core: | |
| runs-on: ubuntu-latest | |
| needs: get-info | |
| env: | |
| OUTPUT_FOLDER: ./build | |
| RELEASE_FOLDER: ./release | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Process app name | |
| id: process-app-name | |
| shell: python3 {0} | |
| run: | | |
| import os | |
| import re | |
| with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: | |
| f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n') | |
| - name: Download soundbank | |
| run: | | |
| mkdir -p soundbank | |
| cd soundbank/ | |
| curl --output Master.strings.bank "https://kyzj-my.sharepoint.com/personal/noreply_studio26f_org/_layouts/15/download.aspx?UniqueId=499108f8%2D5f08%2D45a9%2D84e6%2De6a75616dc3f" | |
| curl --output Master.bank "https://kyzj-my.sharepoint.com/personal/noreply_studio26f_org/_layouts/15/download.aspx?UniqueId=bdd4a636%2Df72f%2D469f%2Db1b9%2D65078a7e383f" | |
| curl --output Effect.bank "https://kyzj-my.sharepoint.com/personal/noreply_studio26f_org/_layouts/15/download.aspx?UniqueId=52f3f937%2D985b%2D40d6%2Da443%2Ded0152b9465b" | |
| # Need to be enabled for release only | |
| # curl --output Music_Beepbox.bank "https://kyzj-my.sharepoint.com/personal/noreply_studio26f_org/_layouts/15/download.aspx?UniqueId=40e4520f%2D2f26%2D4024%2D8d72%2Dc4fc544de6ea" | |
| # curl --output Music_Community.bank "https://kyzj-my.sharepoint.com/personal/noreply_studio26f_org/_layouts/15/download.aspx?UniqueId=3ef03599%2D8b6c%2D4253%2Db79b%2Df76dc07fdffb" | |
| # curl --output Music_Extra.bank "https://kyzj-my.sharepoint.com/personal/noreply_studio26f_org/_layouts/15/download.aspx?UniqueId=e9fc37f1%2D6be5%2D4027%2Da735%2Db26682839df9" | |
| # curl --output Music_FL.bank "https://kyzj-my.sharepoint.com/personal/noreply_studio26f_org/_layouts/15/download.aspx?UniqueId=cf8caef4%2D3698%2D447a%2Da4ce%2D37cbf44f1206" | |
| - name: Build core love package | |
| uses: 26F-Studio/love-actions-core@v1 | |
| with: | |
| build-list: ./Zenitha/ ./assets/ ./datatable/ ./soundbank ./conf.lua ./main.lua ./version.lua | |
| package-path: ${{ env.CORE_LOVE_PACKAGE_PATH }} | |
| - name: Upload core love package | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} | |
| path: ${{ env.CORE_LOVE_PACKAGE_PATH }} | |
| - name: Rename love package | |
| run: | | |
| mkdir -p ${{ env.OUTPUT_FOLDER }} | |
| mv ${{ env.CORE_LOVE_PACKAGE_PATH }} ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ needs.get-info.outputs.base-name }}_Core | |
| path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love | |
| - name: Prepare for release | |
| if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| shell: bash | |
| run: | | |
| mkdir -p ${{ env.RELEASE_FOLDER }} | |
| cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Bare.love | |
| - name: Upload release | |
| if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| allowUpdates: true | |
| artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Bare.love | |
| body: ${{ github.event.head_commit.message }} | |
| prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| auto-test: | |
| runs-on: ubuntu-latest | |
| needs: build-core | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Love actions for testing | |
| uses: love-actions/love-actions-test@feat-use-luajit | |
| with: | |
| font-path: ./assets/fonts/RHDisplayGalaxy-Medium.otf | |
| language-folder: ./assets/language | |
| build-windows: | |
| runs-on: windows-latest | |
| needs: [get-info, build-core, auto-test] | |
| env: | |
| OUTPUT_FOLDER: ./build | |
| RELEASE_FOLDER: ./release | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Process app name | |
| id: process-app-name | |
| shell: python3 {0} | |
| run: | | |
| import os | |
| import re | |
| with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: | |
| f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n') | |
| - name: Download core love package | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} | |
| - name: Update Windows template | |
| shell: python3 {0} | |
| run: | | |
| version_string = "${{ needs.get-info.outputs.version-string }}" | |
| file_version = (f"{version_string.replace('.', ',')},0") | |
| with open("./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc", "r+", encoding="utf8") as file: | |
| data = file.read() | |
| data = data\ | |
| .replace("@Version", version_string)\ | |
| .replace("@FileVersion", file_version) | |
| file.seek(0) | |
| file.truncate() | |
| file.write(data) | |
| - name: Build Windows packages | |
| id: build-packages | |
| uses: 26F-Studio/love-actions-windows@v1 | |
| with: | |
| icon-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/icon.ico | |
| rc-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc | |
| extra-assets-x64: ./.github/build/extraLibs/Windows_x64/fmod.dll ./.github/build/extraLibs/Windows_x64/fmodstudio.dll ./.github/build/extraLibs/Windows_x64/discord-rpc.dll | |
| extra-assets-x86: ./.github/build/extraLibs/Windows_x86/fmod.dll ./.github/build/extraLibs/Windows_x86/fmodstudio.dll ./.github/build/extraLibs/Windows_x86/discord-rpc.dll | |
| love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} | |
| product-name: ${{ steps.process-app-name.outputs.product-name }} | |
| app-id: ${{ secrets.WINDOWS_APP_ID }} | |
| project-website: https://www.studio26f.org/ | |
| installer-languages: ChineseSimplified.isl ChineseTraditional.isl English.isl Spanish.isl French.isl Indonesian.isl Japanese.isl Portuguese.isl | |
| output-folder: ${{ env.OUTPUT_FOLDER }} | |
| - name: Upload 32-bit artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ needs.get-info.outputs.base-name }}_Windows_x86 | |
| path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip | |
| - name: Upload 64-bit artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ needs.get-info.outputs.base-name }}_Windows_x64 | |
| path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip | |
| - name: Upload installer artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ needs.get-info.outputs.base-name }}_Windows_installer | |
| path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_installer.exe | |
| - name: Prepare for release | |
| if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| shell: bash | |
| run: | | |
| mkdir -p ${{ env.RELEASE_FOLDER }} | |
| cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip | |
| cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip | |
| cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_installer.exe ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_installer.exe | |
| - name: Upload release | |
| if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| allowUpdates: true | |
| artifacts: | | |
| ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip | |
| ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip | |
| ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_installer.exe | |
| body: ${{ github.event.head_commit.message }} | |
| prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| build-android: | |
| runs-on: ubuntu-latest | |
| needs: [get-info, build-core, auto-test] | |
| if: github.event_name != 'pull_request' | |
| env: | |
| OUTPUT_FOLDER: ./build | |
| RELEASE_FOLDER: ./release | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Process app name | |
| id: process-app-name | |
| shell: python3 {0} | |
| run: | | |
| import os | |
| import re | |
| with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: | |
| f.write('bundle-id=org.f26_studio.' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n') | |
| f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '-', '${{ needs.get-info.outputs.app-name }}') + '\n') | |
| - name: Download core love package | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} | |
| # - name: Download fmod lib | |
| # Two .so files are in .github/build/extraLibs/Android/ | |
| # Need to put them into the love package, besides the liblove.so (for each architecture) | |
| # TODO: ?????????????????????????? | |
| # TODO: ?????????????????????????? | |
| - name: Build Android packages | |
| id: build-packages | |
| uses: 26F-Studio/love-actions-android@v1 | |
| with: | |
| app-name: ${{ needs.get-info.outputs.app-name }} | |
| bundle-id: ${{ steps.process-app-name.outputs.bundle-id }} | |
| icon-specifier: "@mipmap/icon" | |
| keystore-alias: ${{ secrets.ANDROID_KEYSTORE_ALIAS }} | |
| keystore-base64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | |
| keystore-key-password: ${{ secrets.ANDROID_KEYSTORE_KEYPASSWORD }} | |
| keystore-store-password: ${{ secrets.ANDROID_KEYSTORE_STOREPASSWORD }} | |
| love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} | |
| product-name: ${{ steps.process-app-name.outputs.product-name }} | |
| resource-path: ./.github/build/android/${{ env.BUILD_TYPE }}/res | |
| version-string: ${{ needs.get-info.outputs.version-string }} | |
| version-code: ${{ needs.get-info.outputs.version-code }} | |
| output-folder: ${{ env.OUTPUT_FOLDER }} | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ needs.get-info.outputs.base-name }}_Android_release | |
| path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}-release.apk | |
| - name: Prepare for release | |
| if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| shell: bash | |
| run: | | |
| mkdir -p ${{ env.RELEASE_FOLDER }} | |
| cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}-release.apk ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Android.apk | |
| - name: Upload release | |
| if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| allowUpdates: true | |
| artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Android.apk | |
| body: ${{ github.event.head_commit.message }} | |
| prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| build-linux: | |
| runs-on: ubuntu-latest | |
| needs: [get-info, build-core, auto-test] | |
| env: | |
| OUTPUT_FOLDER: ./build | |
| RELEASE_FOLDER: ./release | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Process app name | |
| id: process-app-name | |
| shell: python3 {0} | |
| run: | | |
| import os | |
| import re | |
| product_name = re.sub(r'[^A-Za-z0-9]+', '-', '${{ needs.get-info.outputs.app-name }}').strip('-').lower() | |
| with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: | |
| f.write('bundle-id=org.26f-studio.' + product_name + '\n') | |
| f.write('product-name=' + product_name + '\n') | |
| - name: Download core love package | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} | |
| - name: Add icon to love package | |
| run: | | |
| cp ./.github/build/linux/${{ env.BUILD_TYPE }}/icon.png assets/image/icon.png | |
| zip -u ${{ env.CORE_LOVE_PACKAGE_PATH }} assets/image/icon.png | |
| rm assets/image/icon.png | |
| - name: Build Linux packages | |
| id: build-packages | |
| uses: 26F-Studio/love-actions-linux@v1 | |
| with: | |
| app-name: ${{ needs.get-info.outputs.app-name }} | |
| bundle-id: ${{ steps.process-app-name.outputs.bundle-id }} | |
| description: Techmino Galaxy is awesome! | |
| version-string: ${{ needs.get-info.outputs.version-string }} | |
| icon-path: ./.github/build/linux/${{ env.BUILD_TYPE }}/icon.png | |
| love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} | |
| lib-path: ./.github/build/extraLibs/Linux | |
| product-name: ${{ steps.process-app-name.outputs.product-name }} | |
| output-folder: ${{ env.OUTPUT_FOLDER }} | |
| - name: Upload AppImage artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ needs.get-info.outputs.base-name }}_Linux_AppImage | |
| path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage | |
| - name: Upload Debian artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ needs.get-info.outputs.base-name }}_Linux_Debian | |
| path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.deb | |
| - name: Prepare for release | |
| if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| shell: bash | |
| run: | | |
| mkdir -p ${{ env.RELEASE_FOLDER }} | |
| cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.AppImage | |
| cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.deb ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.deb | |
| - name: Upload release | |
| if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| allowUpdates: true | |
| artifacts: | | |
| ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.AppImage | |
| ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.deb | |
| body: ${{ github.event.head_commit.message }} | |
| prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| # build-ios: | |
| # runs-on: macos-latest | |
| # needs: [get-info, build-core, auto-test] | |
| # if: github.event_name != 'pull_request' | |
| # env: | |
| # OUTPUT_FOLDER: ./build | |
| # RELEASE_FOLDER: ./release | |
| # steps: | |
| # - uses: actions/checkout@v4 | |
| # with: | |
| # submodules: recursive | |
| # - name: Process app name | |
| # id: process-app-name | |
| # shell: python3 {0} | |
| # run: | | |
| # import os | |
| # import re | |
| # with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: | |
| # f.write('bundle-id=org.26f-studio.' + re.sub(r"[^A-Za-z0-9]+", "-", "${{ needs.get-info.outputs.app-name }}") + '\n') | |
| # f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n') | |
| # - name: Download core love package | |
| # uses: actions/download-artifact@v4 | |
| # with: | |
| # name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} | |
| # - name: Build iOS packages | |
| # id: build-packages | |
| # uses: 26F-Studio/love-actions-ios@v1 | |
| # with: | |
| # app-name: ${{ needs.get-info.outputs.app-name }} | |
| # bundle-id: ${{ steps.process-app-name.outputs.bundle-id }} | |
| # copyright: "Copyright © 2019-2023 26F-Studio. Some Rights Reserved." | |
| # icon-path: ./.github/build/iOS/${{ env.BUILD_TYPE }}/icon | |
| # love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} | |
| # product-name: ${{ steps.process-app-name.outputs.product-name }} | |
| # version-string: ${{ needs.get-info.outputs.version-string }} | |
| # output-folder: ${{ env.OUTPUT_FOLDER }} | |
| # apple-development-base64: ${{ secrets.APPLE_CERT_APPLE_DEVELOPMENT_BASE64 }} | |
| # apple-development-password: ${{ secrets.APPLE_CERT_APPLE_DEVELOPMENT_PWD }} | |
| # api-key: ${{ secrets.APPLE_API_KEY }} | |
| # api-key-id: ${{ secrets.APPLE_API_KEY_ID }} | |
| # api-issuer-id: ${{ secrets.APPLE_API_ISSUER_ID }} | |
| # team-id: ${{ secrets.APPLE_DEVELOPER_TEAM_ID }} | |
| # apple-id: ${{ secrets.APPLE_APPLE_ID }} | |
| # external-test: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| # store-release: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
| # - name: Upload logs artifact | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: ${{ needs.get-info.outputs.base-name }}_iOS_logs | |
| # path: | | |
| # ${{ env.OUTPUT_FOLDER }}/DistributionSummary.plist | |
| # ${{ env.OUTPUT_FOLDER }}/ExportOptions.plist | |
| # ${{ env.OUTPUT_FOLDER }}/Packaging.log | |
| # - name: Upload ipa artifact | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: ${{ needs.get-info.outputs.base-name }}_iOS_ipa | |
| # path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.ipa | |
| # - name: Prepare for release | |
| # if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| # shell: bash | |
| # run: | | |
| # mkdir -p ${{ env.RELEASE_FOLDER }} | |
| # cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.ipa ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_iOS.ipa | |
| # - name: Upload release | |
| # if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| # uses: ncipollo/release-action@v1 | |
| # with: | |
| # allowUpdates: true | |
| # artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_iOS.ipa | |
| # body: ${{ github.event.head_commit.message }} | |
| # prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| # build-macos-appstore: | |
| # runs-on: macos-latest | |
| # needs: [get-info, build-core, auto-test] | |
| # if: github.event_name != 'pull_request' | |
| # env: | |
| # OUTPUT_FOLDER: ./build | |
| # RELEASE_FOLDER: ./release | |
| # steps: | |
| # - uses: actions/checkout@v4 | |
| # with: | |
| # submodules: recursive | |
| # - name: Process app name | |
| # id: process-app-name | |
| # shell: python3 {0} | |
| # run: | | |
| # import os | |
| # import re | |
| # with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: | |
| # f.write('bundle-id=org.26f-studio.' + re.sub(r"[^A-Za-z0-9]+", "-", "${{ needs.get-info.outputs.app-name }}") + '\n') | |
| # f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n') | |
| # - name: Download core love package | |
| # uses: actions/download-artifact@v4 | |
| # with: | |
| # name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} | |
| # - name: Build macOS packages | |
| # id: build-packages | |
| # uses: 26F-Studio/love-actions-macos-appstore@v1 | |
| # with: | |
| # app-name: ${{ needs.get-info.outputs.app-name }} | |
| # bundle-id: ${{ steps.process-app-name.outputs.bundle-id }} | |
| # copyright: "Copyright © 2019-2023 26F-Studio. Some Rights Reserved." | |
| # icon-path: ./.github/build/macOS/${{ env.BUILD_TYPE }}/icon.icns | |
| # love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} | |
| # product-name: ${{ steps.process-app-name.outputs.product-name }} | |
| # version-string: ${{ needs.get-info.outputs.version-string }} | |
| # output-folder: ${{ env.OUTPUT_FOLDER }} | |
| # apple-development-base64: ${{ secrets.APPLE_CERT_APPLE_DEVELOPMENT_BASE64 }} | |
| # apple-development-password: ${{ secrets.APPLE_CERT_APPLE_DEVELOPMENT_PWD }} | |
| # api-key: ${{ secrets.APPLE_API_KEY }} | |
| # api-key-id: ${{ secrets.APPLE_API_KEY_ID }} | |
| # api-issuer-id: ${{ secrets.APPLE_API_ISSUER_ID }} | |
| # team-id: ${{ secrets.APPLE_DEVELOPER_TEAM_ID }} | |
| # apple-id: ${{ secrets.APPLE_APPLE_ID }} | |
| # external-test: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| # store-release: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
| # - name: Upload logs artifact | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: ${{ needs.get-info.outputs.base-name }}_macOS_appstore_logs | |
| # path: | | |
| # ${{ env.OUTPUT_FOLDER }}/DistributionSummary.plist | |
| # ${{ env.OUTPUT_FOLDER }}/ExportOptions.plist | |
| # ${{ env.OUTPUT_FOLDER }}/Packaging.log | |
| # - name: Upload pkg artifact | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: ${{ needs.get-info.outputs.base-name }}_macOS_appstore_pkg | |
| # path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg | |
| # - name: Prepare for release | |
| # if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| # shell: bash | |
| # run: | | |
| # mkdir -p ${{ env.RELEASE_FOLDER }} | |
| # cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_appstore.pkg | |
| # - name: Upload release | |
| # if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| # uses: ncipollo/release-action@v1 | |
| # with: | |
| # allowUpdates: true | |
| # artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_appstore.pkg | |
| # body: ${{ github.event.head_commit.message }} | |
| # prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| # build-macos-portable: | |
| # runs-on: macos-latest | |
| # needs: [get-info, build-core, auto-test] | |
| # if: github.event_name != 'pull_request' | |
| # env: | |
| # OUTPUT_FOLDER: ./build | |
| # RELEASE_FOLDER: ./release | |
| # steps: | |
| # - uses: actions/checkout@v4 | |
| # with: | |
| # submodules: recursive | |
| # - name: Process app name | |
| # id: process-app-name | |
| # shell: python3 {0} | |
| # run: | | |
| # import os | |
| # import re | |
| # with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: | |
| # f.write('bundle-id=org.26f-studio.' + re.sub(r"[^A-Za-z0-9]+", "-", "${{ needs.get-info.outputs.app-name }}") + '\n') | |
| # f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n') | |
| # - name: Download core love package | |
| # uses: actions/download-artifact@v4 | |
| # with: | |
| # name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} | |
| # - name: Build macOS packages | |
| # id: build-packages | |
| # uses: 26F-Studio/love-actions-macos-portable@v1 | |
| # with: | |
| # app-name: ${{ needs.get-info.outputs.app-name }} | |
| # bundle-id: ${{ steps.process-app-name.outputs.bundle-id }} | |
| # copyright: "Copyright © 2019-2023 26F-Studio. Some Rights Reserved." | |
| # icon-path: ./.github/build/macOS/${{ env.BUILD_TYPE }}/icon.icns | |
| # love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} | |
| # product-name: ${{ steps.process-app-name.outputs.product-name }} | |
| # version-string: ${{ needs.get-info.outputs.version-string }} | |
| # output-folder: ${{ env.OUTPUT_FOLDER }} | |
| # account-username: ${{ secrets.APPLE_ACCOUNT_USERNAME }} | |
| # account-password: ${{ secrets.APPLE_ACCOUNT_PASSWORD }} | |
| # developer-id-application-base64: ${{ secrets.APPLE_CERT_DEVELOPER_ID_APPLICATION }} | |
| # developer-id-application-password: ${{ secrets.APPLE_CERT_DEVELOPER_ID_APPLICATION_PWD }} | |
| # team-id: "${{ secrets.APPLE_DEVELOPER_TEAM_ID }}" | |
| # developer-id-installer-base64: ${{ secrets.APPLE_CERT_DEVELOPER_ID_INSTALLER }} | |
| # developer-id-installer-password: ${{ secrets.APPLE_CERT_DEVELOPER_ID_INSTALLER_PWD }} | |
| # dmg-background-path: ./.github/build/macOS/${{ env.BUILD_TYPE }}/dmg.png | |
| # dmg-icon-position: "287 313" | |
| # dmg-icon-size: "128" | |
| # dmg-link-position: "734 313" | |
| # dmg-text-size: "12" | |
| # dmg-volume-icon-path: ./.github/build/macOS/${{ env.BUILD_TYPE }}/dmg.icns | |
| # dmg-volume-name: ${{ steps.process-app-name.outputs.product-name }} | |
| # dmg-window-position: "200 120" | |
| # dmg-window-size: "1024 604" | |
| # - name: Upload pkg artifact | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: ${{ needs.get-info.outputs.base-name }}_macOS_portable_pkg | |
| # path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg | |
| # - name: Upload dmg artifact | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: ${{ needs.get-info.outputs.base-name }}_macOS_portable_dmg | |
| # path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.dmg | |
| # - name: Upload bare artifact | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: ${{ needs.get-info.outputs.base-name }}_macOS_portable_bare | |
| # path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.zip | |
| # - name: Prepare for release | |
| # if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| # shell: bash | |
| # run: | | |
| # mkdir -p ${{ env.RELEASE_FOLDER }} | |
| # cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.pkg | |
| # cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.dmg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.dmg | |
| # - name: Upload release | |
| # if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} | |
| # uses: ncipollo/release-action@v1 | |
| # with: | |
| # allowUpdates: true | |
| # artifacts: | | |
| # ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.pkg | |
| # ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.dmg | |
| # body: ${{ github.event.head_commit.message }} | |
| # prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} | |
| post-build: | |
| runs-on: ubuntu-latest | |
| if: ${{ always() }} | |
| needs: | |
| [ | |
| get-info, | |
| build-core, | |
| auto-test, | |
| build-windows, | |
| build-android, | |
| build-linux, | |
| # build-ios, # Dear [censored], | |
| # build-macos-appstore, # Thank you for your appreciation. | |
| # build-macos-portable, # Sincerely, [International Tetris Community] | |
| ] | |
| env: | |
| ACTION_TYPE: ${{ fromJSON('[["Development", "Pre-release"], ["Release", "Release"]]')[startsWith(github.ref, 'refs/tags/v')][startsWith(github.ref, 'refs/tags/pre')] }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Cleanup | |
| uses: geekyeggo/delete-artifact@v5 | |
| with: | |
| name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} | |
| - name: Send Discord message | |
| uses: Sniddl/discord-commits@v1.6 | |
| with: | |
| webhook: ${{ secrets.DISCORD_WEBHOOK }} | |
| message: "Github Actions for **${{ github.repository }}**." | |
| embed: '{ | |
| "author":{ | |
| "name":"${{ needs.get-info.outputs.app-name }} [${{ env.ACTION_TYPE }}]", | |
| "url":"https://github.com/${{ github.repository }}" | |
| }, | |
| "title":"${{ needs.get-info.outputs.app-name }} (${{ needs.get-info.outputs.version-name }}) Build Result", | |
| "description": "CI triggered at ${{ needs.get-info.outputs.commit-hash }}", | |
| "url":"https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", | |
| "thumbnail":{ | |
| "url":"https://raw.githubusercontent.com/${{ github.repository }}/main/.github/build/linux/${{ env.BUILD_TYPE }}/icon.png" | |
| }, | |
| "color":36863, | |
| "fields":[ | |
| {"name":"Version","value":"${{ needs.get-info.outputs.version-string }}","inline": true}, | |
| {"name":"Package Name","value":"${{ needs.get-info.outputs.base-name }}","inline": true}, | |
| {"name":"Status","value":"**Automatic Test:** ${{ needs.auto-test.result }}\n**Core:** ${{ needs.build-core.result }}\n**Android:** ${{ needs.build-android.result }}\n**iOS:** ${{ needs.build-ios.result }}\n**Linux:** ${{ needs.build-linux.result }}\n**macOS App Store:** ${{ needs.build-macos-appstore.result }}\n**macOS portable:** ${{ needs.build-macos-portable.result }}\n**Windows:** ${{ needs.build-windows.result }}"} | |
| ] | |
| }' |