소개
이 가이드에서는 Rust 패키지를 빌드하고 테스트하고 게시하는 방법을 보여 줍니다.
GitHub 호스팅 실행기에는 Rust의 종속성을 포함하는 소프트웨어가 사전 설치된 도구 캐시가 있습니다. 최신 소프트웨어 및 사전 설치된 Rust 버전의 전체 목록은 GitHub 호스팅 실행기 정보을(를) 참조하세요.
필수 조건
YAML 구문과 이를 GitHub Actions와 함께 사용하는 방법에 대해 잘 알고 있어야 합니다. 자세한 내용은 GitHub Actions에 대한 워크플로 구문을(를) 참조하세요.
Rust 언어를 기��적으로 이해하는 것이 좋습니다. 자세한 내용은 Rust 시작하기를 참조하세요.
Rust 워크플로 템플릿 사용
빠르게 시작하려면 워크플로 템플릿을 리포지토리의 .github/workflows
디렉터리에 추가합니다.
GitHub은 대부분의 Rust 프로젝트에서 작동하는 Rust 워크플로 템플릿을 제공합니다. 이 가이드의 후속 섹션에서는 이 워크플로 템플릿을 사용자 지정하는 방법에 대한 예시를 제공합니다.
-
GitHub에서 리포지토리의 기본 페이지로 이동합니다.
-
리포지토리 이름 아래에서 작업을 클릭합니다.
-
리포지토리에 워크플로가 이미 있는 경우 새 워크플로를 클릭합니다.
-
"워크플로 선택" 페이지에는 권장되는 워크플로 템플릿의 선택 항목이 표시됩니다. “Rust”를 검색합니다.
-
지속적 통합을 클릭하여 워크플로 선택을 필터링합니다.
-
“Rust - GitHub Actions 기준” 워크플로에서 구성을 클릭합니다.
-
필요에 따라 워크플로를 편집합니다. 예를 들어 Rust 버전을 변경합니다.
-
변경 내용 커밋을 클릭합니다.
rust.yml
워크플로 파일이 리포지토리의 .github/workflows
디렉터리에 추가됩니다.
Rust 버전 지정
GitHub 호스팅 실행기는 최신 버전의 Rust 도구 체인을 포함합니다. rustup을 사용하여 실행기에서 설치된 버전을 보고하고 버전을 재정의하고 다른 도구 체인을 설치할 수 있습니다. 자세한 내용�� rustup 책을 참조하세요.
이 예제에서는 실행기 환경을 설정하여 rust의 야간 빌드를 사용하고 버전을 보고하기 위해 사용할 수 있는 단계를 보여 줍니다.
- name: Temporarily modify the rust toolchain version run: rustup override set nightly - name: Output rust version for educational purposes run: rustup --version
- name: Temporarily modify the rust toolchain version
run: rustup override set nightly
- name: Output rust version for educational purposes
run: rustup --version
종속성 캐싱
캐시 작업을 사용하여 종속성을 캐시하고 복원할 수 있습니다. 이 예제에서는 리포지토리에 Cargo.lock
파일이 포함되어 있다고 가정합니다.
- name: Cache uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Cache
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
사용자 지정 요구 사항이 있거나 캐싱에 대한 더 세부적인 제어가 필요한 경우 cache
작업에 대한 다른 구성 옵션을 탐색해야 합니다. 자세한 내용은 워크플로 속도를 높이기 위한 종속성 캐싱을(를) 참조하세요.
코드 빌드 및 테스트
코드를 빌드하고 테스트하기 위해 로컬에서 사용하는 것과 동일한 명령을 사용할 수 있습니다. 이 예시 워크플로에서는 작업에서 cargo build
및 cargo test
를 사용하는 방법을 보여 줍니다.
jobs: build: runs-on: ubuntu-latest strategy: matrix: BUILD_TARGET: [release] # refers to a cargo profile outputs: release_built: ${{ steps.set-output.outputs.release_built }} steps: - uses: actions/checkout@v4 - name: Build binaries in "${{ matrix.BUILD_TARGET }}" mode run: cargo build --profile ${{ matrix.BUILD_TARGET }} - name: Run tests in "${{ matrix.BUILD_TARGET }}" mode run: cargo test --profile ${{ matrix.BUILD_TARGET }}
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
BUILD_TARGET: [release] # refers to a cargo profile
outputs:
release_built: ${{ steps.set-output.outputs.release_built }}
steps:
- uses: actions/checkout@v4
- name: Build binaries in "${{ matrix.BUILD_TARGET }}" mode
run: cargo build --profile ${{ matrix.BUILD_TARGET }}
- name: Run tests in "${{ matrix.BUILD_TARGET }}" mode
run: cargo test --profile ${{ matrix.BUILD_TARGET }}
이 예제에서 사용되는 release
키워드는 cargo 프로필에 해당합니다. Cargo.toml
파일에서 정의한 모든 프로필을 사용할 수 있습니다.
패키지 또는 라이브러리를 crates.io에 게시
워크플로를 설정하여 코드를 빌드하고 테스트한 후에는 비밀을 사용하여 로그인하여 패키지를 crates.io에 게시할 수 있습니다.
- name: Login into crates.io run: cargo login ${{ secrets.CRATES_IO }} - name: Build binaries in "release" mode run: cargo build -r - name: "Package for crates.io" run: cargo package # publishes a package as a tarball - name: "Publish to crates.io" run: cargo publish # publishes your crate as a library that can be added as a dependency
- name: Login into crates.io
run: cargo login ${{ secrets.CRATES_IO }}
- name: Build binaries in "release" mode
run: cargo build -r
- name: "Package for crates.io"
run: cargo package # publishes a package as a tarball
- name: "Publish to crates.io"
run: cargo publish # publishes your crate as a library that can be added as a dependency
크레이트를 빌드하고 패키징하는 데 오류가 있는 경우 매니페스트, Cargo.toml
파일에서 메타데이터를 확인합니다. 매니페스트 형식을 참조하세요. 또한 Cargo.lock
파일을 확인해야 합니다. Cargo.toml 및 Cargo.lock 을 참조하세요.
워크플로 데이터를 아티팩트로 패키지
워크플로가 완료되면 분석을 위해 결과 아티팩트를 업로드하거나 다른 워크플로에서 사용할 수 있습니다. 워크플로에 이러한 예제 단계를 추가하여 다른 워크플로에서 사용할 애플리케이션을 업로드할 수 있습니다.
- name: Upload release artifact uses: actions/upload-artifact@v4 with: name: <my-app> path: target/${{ matrix.BUILD_TARGET }}/<my-app>
- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: <my-app>
path: target/${{ matrix.BUILD_TARGET }}/<my-app>
업로드된 아티팩트를 다른 작업에서 사용하려면 워크플로에 리포지토리에 대한 올바른 권한이 있는지 확인합니다. 자동 토큰 인증을(를) 참조하세요. 다음 예제 단계를 사용하여 이전 워크플로에서 만든 앱을 다운로드하고 GitHub에 게시할 수 있습니다.
- uses: actions/checkout@v4 - name: Download release artifact uses: actions/download-artifact@v4 with: name: <my-app> path: ./<my-app> - name: Publish built binary to GitHub releases - run: | gh release create --generate-notes ./<my-app>/<my-project>#<my-app>
- uses: actions/checkout@v4
- name: Download release artifact
uses: actions/download-artifact@v4
with:
name: <my-app>
path: ./<my-app>
- name: Publish built binary to GitHub releases
- run: |
gh release create --generate-notes ./<my-app>/<my-project>#<my-app>