github action을 이용한 single file exe파일 자동 생성용 프롬프트

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에 실제 업로드된 파일 목록 출력





 dotent 샘플로 작성된 workflow



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 댓글