kotalk/.github/workflows/release-portable.yml
Workflow config file is invalid. Please check your config file: Line: 71 Column 5: Failed to match job-factory: Line: 71 Column 9: Unknown Function Call hashFiles Line: 71 Column 5: Failed to match workflow-job: Line: 71 Column 9: Unknown Function Call hashFiles Line: 74 Column 5: Unknown Property steps Forgejo Actions YAML Schema validation error
ian 799b975406
Some checks are pending
ci / server (push) Waiting to run
ci / web (push) Waiting to run
ci / desktop-windows (push) Waiting to run
공개: 플랫폼 결론과 릴리즈 노트 규칙 반영
2026-04-16 13:54:11 +09:00

235 lines
7.1 KiB
YAML

name: release-clients
on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
version:
description: "릴리즈 버전. 예: v0.1.0-alpha.1"
required: true
type: string
channel:
description: "릴리즈 채널"
required: true
default: alpha
type: choice
options:
- alpha
- beta
- rc
- stable
upload_to_vps:
description: "준비된 릴리즈 번들을 VPS 다운로드 호스트로 업로드"
required: true
default: false
type: boolean
permissions:
contents: read
jobs:
build-windows:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
- name: Install NSIS
run: sudo apt-get update && sudo apt-get install -y nsis
- name: Build Windows release assets
env:
VERSION_INPUT: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.ref_name }}
run: |
chmod +x scripts/release/build-windows-distributions.sh
./scripts/release/build-windows-distributions.sh \
--version "$VERSION_INPUT" \
--output out
cp out/KoTalk-windows-x64-"$VERSION_INPUT".zip out/KoTalk-windows-x64.zip
cp out/KoTalk-windows-x64-onefile-"$VERSION_INPUT".exe out/KoTalk-windows-x64-onefile.exe
cp out/KoTalk-windows-x64-installer-"$VERSION_INPUT".exe out/KoTalk-windows-x64-installer.exe
- name: Upload Windows artifact
uses: actions/upload-artifact@v4
with:
name: windows-release
path: |
out/KoTalk-windows-x64.zip
out/KoTalk-windows-x64-onefile.exe
out/KoTalk-windows-x64-installer.exe
build-android:
if: ${{ hashFiles('src/PhysOn.Mobile.Android/*.csproj') != '' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
- name: Install Android workload
run: dotnet workload install android
- name: Publish Android APK
env:
VERSION_INPUT: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.ref_name }}
run: |
chmod +x scripts/release/build-android-apk.sh
./scripts/release/build-android-apk.sh \
--version "$VERSION_INPUT" \
--output out
cp out/KoTalk-android-universal-"$VERSION_INPUT".apk out/KoTalk-android-universal.apk
- name: Upload Android artifact
uses: actions/upload-artifact@v4
with:
name: android-apk
path: out/KoTalk-android-universal.apk
assemble-release:
if: ${{ always() && needs.build-windows.result == 'success' && (needs.build-android.result == 'success' || needs.build-android.result == 'skipped') }}
needs:
- build-windows
- build-android
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download Windows artifact
uses: actions/download-artifact@v4
with:
name: windows-release
path: incoming/windows
- name: Download Android artifact
continue-on-error: true
uses: actions/download-artifact@v4
with:
name: android-apk
path: incoming/android
- name: Prepare release bundle
env:
VERSION_INPUT: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.ref_name }}
CHANNEL_INPUT: ${{ github.event_name == 'workflow_dispatch' && inputs.channel || '' }}
run: |
chmod +x scripts/release/release-prepare-assets.sh
channel="${CHANNEL_INPUT}"
if [[ -z "$channel" ]]; then
case "$VERSION_INPUT" in
*alpha*) channel="alpha" ;;
*beta*) channel="beta" ;;
*rc*) channel="rc" ;;
*) channel="stable" ;;
esac
fi
prepare_args=(
--version "$VERSION_INPUT"
--channel "$channel"
--windows-zip incoming/windows/KoTalk-windows-x64.zip
--windows-portable-exe incoming/windows/KoTalk-windows-x64-onefile.exe
--windows-installer-exe incoming/windows/KoTalk-windows-x64-installer.exe
--force
)
if [[ -f incoming/android/KoTalk-android-universal.apk ]]; then
prepare_args+=(--android-apk incoming/android/KoTalk-android-universal.apk)
fi
./scripts/release/release-prepare-assets.sh \
"${prepare_args[@]}"
- name: Upload release bundle
uses: actions/upload-artifact@v4
with:
name: release-bundle
path: release-assets
publish-forge-release:
if: ${{ secrets.FORGE_RELEASE_TOKEN != '' }}
needs: assemble-release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download release bundle
uses: actions/download-artifact@v4
with:
name: release-bundle
path: .
- name: Publish release to forge
env:
VERSION_INPUT: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.ref_name }}
FORGE_RELEASE_TOKEN: ${{ secrets.FORGE_RELEASE_TOKEN }}
run: |
chmod +x scripts/release/release-publish-forge.sh
./scripts/release/release-publish-forge.sh --version "$VERSION_INPUT"
upload-to-vps:
if: github.event_name == 'workflow_dispatch' && inputs.upload_to_vps
needs: assemble-release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download release bundle
uses: actions/download-artifact@v4
with:
name: release-bundle
path: .
- name: Configure SSH key
env:
DOWNLOAD_SSH_KEY: ${{ secrets.DOWNLOAD_SSH_KEY }}
run: |
test -n "$DOWNLOAD_SSH_KEY"
install -d -m 700 ~/.ssh
printf '%s\n' "$DOWNLOAD_SSH_KEY" > ~/.ssh/download_host
chmod 600 ~/.ssh/download_host
- name: Upload bundle to download host
env:
VERSION_INPUT: ${{ inputs.version }}
DOWNLOAD_SSH_HOST: ${{ secrets.DOWNLOAD_SSH_HOST }}
DOWNLOAD_SSH_USER: ${{ secrets.DOWNLOAD_SSH_USER }}
DOWNLOAD_ROOT: ${{ secrets.DOWNLOAD_ROOT }}
run: |
test -n "$DOWNLOAD_SSH_HOST"
test -n "$DOWNLOAD_SSH_USER"
test -n "$DOWNLOAD_ROOT"
chmod +x scripts/release/release-upload-assets.sh
./scripts/release/release-upload-assets.sh \
--version "$VERSION_INPUT" \
--host "$DOWNLOAD_SSH_HOST" \
--user "$DOWNLOAD_SSH_USER" \
--target "$DOWNLOAD_ROOT" \
--ssh-key ~/.ssh/download_host