Skip to content

调整动态库文件结构 #1497

调整动态库文件结构

调整动态库文件结构 #1497

Workflow file for this run

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/ ./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/[email protected]
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 }}"}
]
}'