소개
update-nuspec-action은 .NET 프로젝트의 .csproj 파일을 기반으로 nuspec 파일의 의존성을 자동으로 동기화하는 GitHub Action입니다. Rust로 작성된 CLI 도구를 Docker 컨테이너로 래핑하여 GitHub Actions 워크플로에서 사용할 수 있도록 제공됩니다. 이 도구는 nuspec 파일을 스캔하고, 동일한 폴더의 {id}.csproj 파일을 찾아 PackageReference 버전을 기준으로 의존성을 업데이트, 추가 또는 삭제합니다. 선택적으로 package.json의 버전과 npm 의존성도 동기화할 수 있습니다.
상세정보
의존성 동기화
이 도구는 지정된 디렉터리에서 재귀적으로 *.nuspec 파일을 찾고, 각 nuspec 파일과 동일한 폴더에 있는 {id}.csproj 파일을 로드합니다. 여기서 {id}는 nuspec 파일의 값입니다. 그런 다음 csproj의 PackageReference 버전을 기준으로 nuspec 파일의 섹션을 업데이트합니다.
플랫 프레임워크 및 그룹드 프레임워크 지원
플랫 nuspec의 경우 단일 의존성 블록을 처리하고, 그룹드 nuspec의 경우 블록별로 의존성을 동기화합니다. 각 프레임워크 그룹은 해당 TFM에 적용되는 csproj의 패키지만을 기준으로 동기화됩니다.
의존성 변경 사항 보고
동기화 후 콘솔 보고서를 생성하여 변경 사항을 색상으로 표시합니다: 삭제됨(빨강), 업데이트됨(노랑), 추가됨(초록), 변경 없음(회색). 이 보고서는 dry-run 모드에서도 동일하게 출력되며, 파일 변경 없이 로그만 출력됩니다.
package.json 및 npm 의존성 동기화 (선택 사항)
packageVersion 입력이 제공되면, 지정된 디렉터리 하위의 모든 package.json 파일의 version 필드를 업데이트합니다(노드_modules는 건너뜁니다). 또한 dependencyScope가 설정되면, 해당 스코프에 맞는 npm 의존성을 ^packageVersion으로 맞춥니다.
다운로드·설치 방법
이 도구는 GitHub Actions에서 직접 사용할 수 있는 액션으로 제공됩니다. 워크플로 파일에서 다음과 같이 사용합니다:
uses: denis-peshkov/[email protected] with: dir: src/MyPackage
dir 입력은 스캔할 루트 폴더를 지정하며, 기본값은 현재 디렉터리(.)입니다. GitHub 워크스페이스 기준 상대 경로로 해석됩니다. 절대 경로로 시작하면 그대로 사용됩니다.
기본 사용법/명령어
기본 사용법은 위와 같이 워크플로 단계에서 uses 키를 통해 액션을 호출하는 것입니다. 주요 입력 옵션은 다음과 같습니다:
- dir: 스캔할 디렉터리 (기본값: .)
- dryRun: true로 설정하면 파일 변경 없이 콘솔에 변경 사항 보고서만 출력 (기본값: false)
- packageVersion: package.json의 버전을 설정할 SemVer 값 (선택 사항)
- dependencyScope: npm 의존성 동기화 대상 스코프 (예: ‘@guru/’) (선택 사항)
- imageTag: 사용할 Docker 이미지 태그 지정 (기본값: @ref에서 유도)
예시: dry-run 모드로 실행하여 변경 사항을 미리 보기:
uses: denis-peshkov/[email protected] with: dir: src/MyPackage dryRun: true
이런 경우에 유용합니다
.NET 프로젝트를 관리하고 nuspec 파일을 수동으로 업데이트하는 데 시간을 소모하는 개발자나 DevOps 엔지니어에게 유용합니다. 특히 여러 TFM(Target Framework Monolith)을 사용하는 프로젝트에서 각 프레임워크별로 의존성을 정확히 동기화해야 할 때, 이 도구를 사용하면 수작업 오류를 줄이고 CI/CD 파이프라인에서 자동화할 수 있습니다. Chocolatey 패키지 저장소에 배포하기 전에 nuspec 파일을 최신 상태로 유지해야 하는 경우에도 유용합니다.
지원 환경·시스템 요구사항
이 GitHub Action은 Docker 컨테이너 액션으로, GitHub 호스팅 러너에서는 linux/amd64 플랫폼에서만 실행됩니다. 따라서 ubuntu-latest 또는 자체 호스팅된 linux/amd64 Docker 환경을 사용해야 합니다. windows-latest 또는 macos-latest 호스팅 러너에서는 직접 실행할 수 없습니다. 다만, Windows 호스트에서는 로컬 Rust CLI를 사용할 수 있습니다(리포지토리의 update-nuspec/ 디렉터리에서 cargo build –release 후 실행).
최신 버전·업데이트
현재 버전은 2.0.155이며, 이는 GitHub 리포지터리의リリース 태그와 일치합니다. 버전 정보는 action.yml 및 배포된 Docker 이미지 태그에서 확인할 수 있습니다. 최신 버전은 GitHub 리포지터리의リリース 페이지에서 확인할 수 있습니다.
제한 사항·확인 사항
이 액션은 Docker 컨테이너 기반이므로 GitHub 호스팅 Windows 또는 macOS 러너에서는 직접 실행할 수 없습니다. Windows에서 사용하려면 별도의 작업으로 ubuntu-latest 러너를 사용하거나, 로컬 Rust CLI를 직접 빌드하여 사용해야 합니다. 또한, 액션은 .nuspec 파일이 없을 경우 오류를 반환하지 않고 종료 코드 0과 함께 ‘*.nuspec files not found!’ 메시지를 출력합니다.
시스템 요구사항
별도의 시스템 요구사항이 등록되지 않았습니다.


