name: Techmino 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 }} update-title: ${{ steps.app-info.outputs.update-title }} update-note: ${{ steps.app-info.outputs.update-note }} 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" os.execute('echo "app-name=Techmino" >> $GITHUB_OUTPUT') os.execute('echo "version-name=' .. version.name .. '" >> $GITHUB_OUTPUT') os.execute('echo "version-string=' .. version.string:gsub("%a", "") .. '" >> $GITHUB_OUTPUT') os.execute('echo "version-code=' .. tostring(version.code) .. '" >> $GITHUB_OUTPUT') local note = require 'parts.updateLog' local p1 = note:find("\n%d") + 1 local p2 = note:find("\n", p1) - 1 os.execute('echo "update-title=' .. note:sub(p1, p2) .. '" >> $GITHUB_OUTPUT') local p3 = note:find("\n", note:find("\n%d") + 1) + 1 local p4 = note:find("\n%d", p3 + 1) updateNote = note:sub(p3, p4 - 2) :gsub(" ", "- ") :gsub(" ", "# ") os.execute('echo "update-note<> $GITHUB_OUTPUT') os.execute('echo "' .. updateNote .. '" >> $GITHUB_OUTPUT') os.execute('echo "EOF" >> $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_${{ 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@v3 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') - uses: ./.github/actions/update-version if: ${{ !startsWith(github.ref, 'refs/tags/v') }} with: commit: ${{ needs.get-info.outputs.commit-hash }} type: snapshot - name: Build core love package uses: love-actions/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: Add icon to love package run: | cp ./.github/build/linux/${{ env.BUILD_TYPE }}/icon.png media/image/icon.png zip -u ${{ env.CORE_LOVE_PACKAGE_PATH }} media/image/icon.png rm media/image/icon.png - 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@v3 with: name: ${{ needs.get-info.outputs.base-name }}_Core_love 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: ${{ needs.get-info.outputs.update-note }} name: ${{ needs.get-info.outputs.update-title }} prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} auto-test: runs-on: ubuntu-latest needs: build-core steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Love actions for testing uses: love-actions/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] if: github.event_name != 'pull_request' env: OUTPUT_FOLDER: ./build RELEASE_FOLDER: ./release steps: - uses: actions/checkout@v3 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: if "${{ env.BUILD_TYPE }}" == "dev": f.write('bundle-id=org.f26_studio.' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '.snapshot\n') f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '-', '${{ needs.get-info.outputs.app-name }}') + '_Snapshot\n') else: 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@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Download ColdClear uses: ./.github/actions/get-cc with: platform: Android dir: ./libAndroid - name: Build Android packages id: build-packages uses: love-actions/love-actions-android@main 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/${{ env.BUILD_TYPE }}/res extra-assets: ./libAndroid/ custom-scheme: studio26f://oauth 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_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: ${{ needs.get-info.outputs.update-note }} name: ${{ needs.get-info.outputs.update-title }} 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@v3 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.techmino\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@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: love-actions/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-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 }} external-test: ${{ startsWith(github.ref, 'refs/tags/pre') }} store-release: ${{ startsWith(github.ref, 'refs/tags/v') }} - name: Upload logs artifact uses: actions/upload-artifact@v3 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@v3 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: ${{ needs.get-info.outputs.update-note }} name: ${{ needs.get-info.outputs.update-title }} 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@v3 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@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Add icon to love package run: | cp ./.github/build/linux/${{ env.BUILD_TYPE }}/icon.png media/image/icon.png zip -u ${{ env.CORE_LOVE_PACKAGE_PATH }} media/image/icon.png rm media/image/icon.png - name: Download ColdClear uses: ./.github/actions/get-cc with: platform: Linux dir: ./ColdClear - name: Process ColdClear shell: bash run: | cd ./ColdClear mkdir -p ./lib/lua/5.1 mv ./x64/CCloader.so ./lib/lua/5.1 - name: Build Linux packages id: build-packages uses: love-actions/love-actions-linux@v1 with: app-name: ${{ needs.get-info.outputs.app-name }} bundle-id: ${{ steps.process-app-name.outputs.bundle-id }} description: Techmino is fun! 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: ./ColdClear/lib product-name: ${{ steps.process-app-name.outputs.product-name }} output-folder: ${{ env.OUTPUT_FOLDER }} - name: Upload AppImage artifact uses: actions/upload-artifact@v3 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@v3 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: ${{ needs.get-info.outputs.update-note }} name: ${{ needs.get-info.outputs.update-title }} 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@v3 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.techmino\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@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: love-actions/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 }} 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 }} external-test: ${{ startsWith(github.ref, 'refs/tags/pre') }} store-release: ${{ startsWith(github.ref, 'refs/tags/v') }} - name: Upload logs artifact uses: actions/upload-artifact@v3 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@v3 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: ${{ needs.get-info.outputs.update-note }} name: ${{ needs.get-info.outputs.update-title }} 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@v3 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.techmino\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@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: love-actions/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 }} 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/${{ env.BUILD_TYPE }}/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/${{ env.BUILD_TYPE }}/dmg.icns dmg-volume-name: ${{ steps.process-app-name.outputs.product-name }} dmg-window-position: "200 120" dmg-window-size: "800 500" - name: Upload pkg artifact uses: actions/upload-artifact@v3 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@v3 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@v3 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: ${{ needs.get-info.outputs.update-note }} name: ${{ needs.get-info.outputs.update-title }} prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} build-web: runs-on: ubuntu-latest needs: [get-info, build-core, auto-test] steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Download core love package uses: actions/download-artifact@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Move core love package run: | mv ${{ env.CORE_LOVE_PACKAGE_PATH }} ./.github/build/web/game.data - name: Deploy to GitHub Pages uses: crazy-max/ghaction-github-pages@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: build_dir: ./.github/build/web/ keep_history: false target_branch: web-dev - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ needs.get-info.outputs.base-name }}_Web_PWA path: ./.github/build/web/ build-windows: runs-on: windows-latest needs: [get-info, build-core, auto-test] env: OUTPUT_FOLDER: ./build RELEASE_FOLDER: ./release steps: - uses: actions/checkout@v3 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@v3 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Download ColdClear uses: ./.github/actions/get-cc with: platform: Windows dir: ./ColdClear - 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: love-actions/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 love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} extra-assets-x86: ./ColdClear/x86/CCloader.dll ./ColdClear/x86/cold_clear.dll extra-assets-x64: ./ColdClear/x64/CCloader.dll ./ColdClear/x64/cold_clear.dll 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@v3 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@v3 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@v3 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: ${{ needs.get-info.outputs.update-note }} name: ${{ needs.get-info.outputs.update-title }} prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} 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-web, build-windows, ] env: ACTION_TYPE: ${{ fromJSON('[["Development", "Pre-release"], ["Release", "Release"]]')[startsWith(github.ref, 'refs/tags/v')][startsWith(github.ref, 'refs/tags/pre')] }} steps: - name: Cleanup uses: geekyeggo/delete-artifact@v2 with: name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} - name: Send Discord message if: github.event_name != 'pull_request' 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 }}"} ] }'