github action을 이용한 single file exe파일 자동 생성하기 위해서
prompt를 통해 codex나 github copilot을 활용하면 편리하다
- workflow_dispatch 수동 트리거
- Release 생성 + 에셋 업로드
- 가능한 경우 single-file 실행파일 생성
- 스택별(.NET / PySide6 / Tauri) 빌드 분기
1) 범용 요청 프롬프트 (멀티 스택 공통)
다음 요구사항으로 GitHub Actions 워크플로우를 만들어줘.
목표:
- manual trigger(workflow_dispatch)로 릴리즈 빌드/배포
- tag_name, release_name, target_commitish, draft, prerelease 입력 지원
- GitHub Release 생성 및 산출물(asset) 업로드
- 가능한 경우 single-file 실행파일 생성
- Windows 우선(필요 시 Linux/macOS 매트릭스 확장 가능)
필수 조건:
1) 파일 경로: .github/workflows/manual-release-single-file.yml
2) permissions: contents: write
3) 입력값:
- tag_name (required)
- release_name (optional)
- target_commitish (default: main)
- draft (boolean)
- prerelease (boolean)
4) release_name이 비어있으면 자동 기본값 생성
5) asset_name 규칙을 명확히 정의 (예: <app>-<platform>-<tag>.<ext>)
6) 빌드 실패 시 즉시 실패
7) 릴리즈 업로드는 softprops/action-gh-release@v2 사용
8) README에 수동 실행 방법(Inputs 예시) 업데이트
9) docs/test-log.md에 검증 명령 기록 형식 추가
10) 워크플로우 YAML + 필요한 스크립트/설정 파일까지 함께 수정
추가로 해줘:
- 같은 태그 재실행 시 덮어쓰기/충돌 처리 전략 명시
- 아티팩트 경로 탐색을 안정적으로 구현(하드코딩 최소화)
- 최종 결과물 파일명/위치 출력(step summary) 추가2) .NET 전용 요청 프롬프트
우리 repo는 .NET 앱이다. 수동 트리거 릴리즈 워크플로우를 만들어줘.
Release에서 win-x64 self-contained single-file exe를 바로 확인할 수 있어야 한다.
요구사항:
- workflow_dispatch inputs: tag_name, release_name, target_commitish, draft, prerelease
- dotnet-version: 8.0.x
- dotnet publish 옵션:
- -c Release
- -r win-x64
- --self-contained true
- -p:PublishSingleFile=true
- -p:IncludeNativeLibrariesForSelfExtract=true
- -p:EnableWindowsTargeting=true
- exe 산출물을 태그명 포함 파일명으로 rename 후 GitHub Release에 업로드
- softprops/action-gh-release@v2 사용
- README에 실행법 추가
추가:
- csproj 경로를 입력값(project_path)으로 받을 수 있게 해줘 (default 제공)
- app exe 이름도 입력값(app_exe_name)으로 받을 수 있게 해줘3) Python + PySide6 전용 요청 프롬프트
우리 repo는 Python(PySide6) 데스크톱 앱이다.
수동 트리거로 single-file exe를 만들어 GitHub Release에 올리는 workflow를 만들어줘.
요구사항:
- workflow_dispatch inputs: tag_name, release_name, target_commitish, draft, prerelease
- windows-latest runner
- Python setup 후 dependencies 설치
- PyInstaller로 onefile 빌드:
- pyinstaller --noconfirm --onefile --windowed <entry_script>
- 빌드 결과 exe를 tag 포함 파일명으로 rename
- softprops/action-gh-release@v2로 업로드
- README에 실행법/입력 예시 추가
추가:
- entry_script, app_name, icon_path를 workflow input으로 받을 수 있게 해줘
- 필요한 hidden-import / add-data 옵션을 쉽게 확장할 수 있게 변수화해줘4) Tauri 전용 요청 프롬프트
우리 repo는 Tauri 앱이다.
workflow_dispatch로 수동 릴리즈를 실행해서 Windows 설치파일(msi/exe) 또는 번들을 GitHub Release에 업로드하는 workflow를 만들어줘.
요구사항:
- workflow_dispatch inputs: tag_name, release_name, target_commitish, draft, prerelease
- Node + Rust + (필요 시) Tauri prerequisites 설정
- pnpm install / npm ci 등 repo 표준 방식 사용
- tauri build 실행
- 생성된 번들 파일(.msi/.exe/.zip 등)을 찾아 tag 포함 파일명으로 업로드
- softprops/action-gh-release@v2 사용
- README에 수동 릴리즈 실행 방법 추가
추가:
- 번들 산출물 경로가 바뀌어도 동작하도록 파일 탐색(glob) 방식으로 구현
- step summary에 실제 업로드된 파일 목록 출력
name: manual-release-single-file
on:
workflow_dispatch:
inputs:
tag_name:
description: "Release tag name (example: v0.1.0)"
required: true
type: string
release_name:
description: "GitHub Release title (optional)"
required: false
type: string
target_commitish:
description: "Commit SHA or branch name used when creating the release tag"
required: false
default: main
type: string
draft:
description: "Create as draft release"
required: false
default: false
type: boolean
prerelease:
description: "Mark release as pre-release"
required: false
default: false
type: boolean
permissions:
contents: write
jobs:
publish-and-release:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "9.0.x"
- name: Resolve release metadata
id: metadata
shell: pwsh
env:
RELEASE_NAME_INPUT: ${{ inputs.release_name }}
TAG_NAME: ${{ inputs.tag_name }}
run: |
if ([string]::IsNullOrWhiteSpace($env:RELEASE_NAME_INPUT)) {
$releaseName = "WPF Blank App $($env:TAG_NAME)"
} else {
$releaseName = $env:RELEASE_NAME_INPUT
}
$assetName = "wpf-blank-app-win-x64-$($env:TAG_NAME).exe"
"release_name=$releaseName" >> $env:GITHUB_OUTPUT
"asset_name=$assetName" >> $env:GITHUB_OUTPUT
- name: Publish single-file exe
run: >
dotnet publish
src/WpfBlankApp.App/WpfBlankApp.App.csproj
-c Release
-r win-x64
--self-contained true
-p:PublishSingleFile=true
-p:IncludeNativeLibrariesForSelfExtract=true
-p:EnableWindowsTargeting=true
-o "${{ github.workspace }}\publish\win-x64"
- name: Prepare release asset
shell: pwsh
run: >
Copy-Item
-Path "${{ github.workspace }}\publish\win-x64\WpfBlankApp.App.exe"
-Destination "${{ github.workspace }}\${{ steps.metadata.outputs.asset_name }}"
-Force
- name: Upload release asset
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ inputs.tag_name }}
target_commitish: ${{ inputs.target_commitish }}
name: ${{ steps.metadata.outputs.release_name }}
draft: ${{ inputs.draft }}
prerelease: ${{ inputs.prerelease }}
files: ${{ github.workspace }}\${{ steps.metadata.outputs.asset_name }}
0 댓글