name: Techmino Develop CI on: push: branches: [main, ci*] pull_request: branches: [main] env: 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@v3 - 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" print("::set-output name=app-name::Techmino") print("::set-output name=version-name::"..version.name) print("::set-output name=version-string::"..version.string:gsub("%a", "")) print(("::set-output name=version-code::%d"):format(version.code)) - name: Get git info id: git-info shell: bash run: | COMMIT_HASH=$(git rev-parse --short ${{ GITHUB.SHA }}) echo ::set-output name=commit-hash::$COMMIT_HASH - name: Assemble package base name id: assemble-base-name shell: bash run: | BASE_NAME=Techmino_${{ steps.app-info.outputs.version-string }}_${{ steps.git-info.outputs.commit-hash }}_#${{ GITHUB.RUN_NUMBER }} echo ::set-output name=base-name::$BASE_NAME build-core: runs-on: ubuntu-latest needs: get-info env: PACKAGE_NAME: ./${{ needs.get-info.outputs.base-name }}_Core.love outputs: download-url: ${{ steps.transfer.outputs.download-url }} steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Build core love package uses: 26F-Studio/love-actions-core@v1 with: build-list: ./media/ ./parts/ ./Zframework/ ./conf.lua ./main.lua ./version.lua package-path: ${{ env.CORE_LOVE_PACKAGE_PATH }} - name: Upload core love package uses: actions/upload-artifact@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} path: ${{ env.CORE_LOVE_PACKAGE_PATH }} - name: Rename love package run: mv ${{ env.CORE_LOVE_PACKAGE_PATH }} ${{ env.PACKAGE_NAME }} - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ needs.get-info.outputs.base-name }}_Core path: ${{ env.PACKAGE_NAME }} - name: Upload to WeTransfer id: transfer run: | curl -sL https://git.io/file-transfer | sh ./transfer wet -s -p 16 --no-progress ${{ env.PACKAGE_NAME }} 2>&1>./wetransfer.log echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" auto-test: runs-on: ubuntu-latest needs: build-core steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Love actions for testing uses: 26F-Studio/love-actions-test@v1 with: font-path: ./parts/fonts/proportional.otf language-folder: ./parts/language build-android: runs-on: ubuntu-latest needs: [get-info, build-core, auto-test] env: OUTPUT_FOLDER: ./build outputs: download-url: ${{ steps.transfer.outputs.download-url }} steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Process app name id: process-app-name shell: python3 {0} run: | import os import re os.system("echo ::set-output name=bundle-id::org.f26_studio." + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}")) os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "-", "${{ needs.get-info.outputs.app-name }}")) - name: Download core love package uses: actions/download-artifact@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Download ColdClear uses: ./.github/actions/get-cc with: platform: Android dir: ./ColdClear - name: Process ColdClear shell: bash run: | mkdir -p ./libAndroid/armeabi-v7a/ mkdir -p ./libAndroid/arm64-v8a/ mv ./ColdClear/armeabi-v7a/libCCloader.so ./libAndroid/armeabi-v7a/ mv ./ColdClear/arm64-v8a/libCCloader.so ./libAndroid/arm64-v8a/ - 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 }} resource-path: ./.github/build/android/dev/res libs-path: ./ColdClear/ extra-assets: ./libAndroid/ product-name: ${{ steps.process-app-name.outputs.product-name }} 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@v3 with: name: ${{ needs.get-info.outputs.base-name }}_Android path: ${{ env.OUTPUT_FOLDER }}/* - name: Upload to WeTransfer id: transfer run: | curl -sL https://git.io/file-transfer | sh ./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" build-ios: runs-on: macos-latest needs: [get-info, build-core, auto-test] env: OUTPUT_FOLDER: ./build outputs: download-url: ${{ steps.transfer.outputs.download-url }} steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Process app name id: process-app-name shell: python3 {0} run: | import os import re os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino") os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}")) - name: Download core love package uses: actions/download-artifact@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Download ColdClear uses: ./.github/actions/get-cc with: platform: iOS dir: ./ColdClear - 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-2022 26F-Studio. Some Rights Reserved." icon-path: ./.github/build/iOS/dev/icon love-patch: ./.github/build/iOS/love.patch love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} libs-path: ./ColdClear/arm64/ 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 }} - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ needs.get-info.outputs.base-name }}_iOS path: ${{ env.OUTPUT_FOLDER }}/* - name: Upload to WeTransfer id: transfer run: | wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz ./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" build-linux: runs-on: ubuntu-latest needs: [get-info, build-core, auto-test] env: OUTPUT_FOLDER: ./build outputs: download-url: ${{ steps.transfer.outputs.download-url }} steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Process app name id: process-app-name shell: python3 {0} run: | import os import re os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}")) - name: Download core love package uses: actions/download-artifact@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Download ColdClear uses: ./.github/actions/get-cc with: platform: Linux dir: ./ColdClear - name: Process ColdClear shell: bash run: | cd ./ColdClear mkdir ./libs mv ./x64/libcold_clear.so ./libs mkdir ./shared mv ./x64/CCloader.so ./shared - name: Build Linux packages id: build-packages uses: 26F-Studio/love-actions-linux@v1 with: desktop-file-path: ./.github/build/linux/dev/template.desktop executable-name: app icon-path: ./.github/build/linux/dev/icon.png love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} libs-path: ./ColdClear/libs/ shared-path: ./ColdClear/shared/ product-name: ${{ steps.process-app-name.outputs.product-name }} output-folder: ${{ env.OUTPUT_FOLDER }} - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ needs.get-info.outputs.base-name }}_Linux path: ${{ env.OUTPUT_FOLDER }}/* - name: Upload to WeTransfer id: transfer run: | curl -sL https://git.io/file-transfer | sh ./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" build-macos-appstore: runs-on: macos-latest needs: [get-info, build-core, auto-test] env: OUTPUT_FOLDER: ./build outputs: download-url: ${{ steps.transfer.outputs.download-url }} steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Process app name id: process-app-name shell: python3 {0} run: | import os import re os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino") os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}")) - name: Download core love package uses: actions/download-artifact@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Download ColdClear uses: ./.github/actions/get-cc with: platform: macOS dir: ./ColdClear - name: Process ColdClear shell: bash run: | rm ./ColdClear/universal/libcold_clear.a - 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-2022 26F-Studio. Some Rights Reserved." icon-path: ./.github/build/macOS/dev/icon.icns love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} libs-path: ./ColdClear/universal/ 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 }} - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ needs.get-info.outputs.base-name }}_macOS_appstore path: ${{ env.OUTPUT_FOLDER }}/* - name: Upload to WeTransfer id: transfer run: | wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz ./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" build-macos-portable: runs-on: macos-latest needs: [get-info, build-core, auto-test] env: OUTPUT_FOLDER: ./build outputs: download-url: ${{ steps.transfer.outputs.download-url }} steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Process app name id: process-app-name shell: python3 {0} run: | import os import re os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino") os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}")) - name: Download core love package uses: actions/download-artifact@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Download ColdClear uses: ./.github/actions/get-cc with: platform: macOS dir: ./ColdClear - name: Process ColdClear shell: bash run: | rm ./ColdClear/universal/libcold_clear.a - 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-2022 26F-Studio. Some Rights Reserved." icon-path: ./.github/build/macOS/dev/icon.icns love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} libs-path: ./ColdClear/universal/ 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 }} team-id: "${{ secrets.APPLE_DEVELOPER_TEAM_ID }}" developer-id-application-base64: ${{ secrets.APPLE_CERT_DEVELOPER_ID_APPLICATION }} developer-id-application-password: ${{ secrets.APPLE_CERT_DEVELOPER_ID_APPLICATION_PWD }} 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/dev/dmg.png dmg-icon-position: "239 203" dmg-icon-size: "100" dmg-link-position: "565 203" dmg-text-size: "12" dmg-volume-icon-path: ./.github/build/macOS/dev/dmg.icns dmg-volume-name: ${{ steps.process-app-name.outputs.product-name }} dmg-window-position: "200 120" dmg-window-size: "800 500" - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ needs.get-info.outputs.base-name }}_macOS_portable path: ${{ env.OUTPUT_FOLDER }}/* - name: Upload to WeTransfer id: transfer run: | wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz ./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" build-windows: runs-on: windows-latest needs: [get-info, build-core, auto-test] env: OUTPUT_FOLDER: ./build outputs: download-url: ${{ steps.transfer.outputs.download-url }} steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Process app name id: process-app-name shell: python3 {0} run: | import os import re os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}")) - name: Download core love package uses: actions/download-artifact@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Build Windows packages id: build-packages uses: 26F-Studio/love-actions-windows@v1 with: icon-path: ./.github/build/windows/dev/icon.ico rc-path: ./.github/build/windows/dev/template.rc 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 }} - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ needs.get-info.outputs.base-name }}_Windows path: ${{ env.OUTPUT_FOLDER }}/* - name: Get transfer env: TEMP_PATH: ./temp.zip shell: bash run: | curl -L --retry 5 https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_windows_amd64.zip -o ${{ env.TEMP_PATH }} 7z x ${{ env.TEMP_PATH }} -o./ rm ${{ env.TEMP_PATH }} - name: Upload to WeTransfer id: transfer run: | ./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" post-build: runs-on: ubuntu-latest if: ${{ always() }} needs: [ get-info, auto-test, build-core, build-android, build-ios, build-linux, build-macos-appstore, build-macos-portable, build-windows, ] steps: - uses: actions/checkout@v3 - name: Cleanup uses: geekyeggo/delete-artifact@v1 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Send Discord message uses: Sniddl/discord-commits@v1.3 with: webhook: ${{ secrets.DISCORD_WEBHOOK }} message: "Github Actions for **${{ github.repository }}**." embed: '{ "author":{ "name":"${{ needs.get-info.outputs.app-name }} [Development]", "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/dev/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 }}"}, {"name":"Download Links","value":"**Core:** ${{ needs.build-core.outputs.download-url}}\n**Android:** ${{ needs.build-android.outputs.download-url }}\n**iOS:** ${{ needs.build-ios.outputs.download-url }}\n**Linux:** ${{ needs.build-linux.outputs.download-url }}\n**macOS App Store:** ${{ needs.build-macos-appstore.outputs.download-url }}\n**macOS portable:** ${{ needs.build-macos-portable.outputs.download-url }}\n**Windows:** ${{ needs.build-windows.outputs.download-url}}"} ] }'