Cargo: 졜초 κ²Œμ‹œ μ‹œ νŠΉμ • 크레이트 데이터 확인 μš”μ²­

에 λ§Œλ“  2020λ…„ 11μ›” 22일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: rust-lang/cargo

ν•΄κ²°ν•˜λ €λŠ” 문제λ₯Ό μ„€λͺ…ν•˜μ‹­μ‹œμ˜€.
crates.io에 λŒ€ν•œ κ°€μž₯ 일반적인 지원 μš”μ²­μ€ 크레이트λ₯Ό μ‚­μ œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€λ₯Έ μƒμž/μ†ŒλΉ„μžλ₯Ό κΉ¨λœ¨λ¦¬λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ΄λŸ¬ν•œ μš”μ²­μ— 거의 응할 수 μ—†μŠ΅λ‹ˆλ‹€. μš”μ²­μ— λŒ€ν•œ 일반적인 μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • - 와 _ 사이λ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ μƒμžμ˜ λŒ€/μ†Œλ¬Έμž( foo vs Foo )λ₯Ό μˆ˜μ •ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
  • μ˜€νƒ€λ₯Ό λƒˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ€ μ •ν™•ν•œ μ΄λ¦„μœΌλ‘œ κ²Œμ‹œν–ˆμ§€λ§Œ ν˜Όλ™μ„ ν”Όν•˜κΈ° μœ„ν•΄ μ‚­μ œν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. (죽은 μƒμžμ˜ λͺ¨λ“  버전을 μž‘μ•„ λ‹ΉκΈ°λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.)
  • μž‘μ„±μž ν•„λ“œμ— λ‚΄ 이름과 이메일 μ£Όμ†Œκ°€ μžλ™μœΌλ‘œ μ±„μ›Œμ§€λŠ”μ§€ λͺ°λžμŠ΅λ‹ˆλ‹€.
  • λ‚˜λŠ” 무언가λ₯Ό ν…ŒμŠ€νŠΈν•˜κ³  μžˆμ—ˆκ³  아무도 이 μƒμžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. (그듀은 μŠ€ν…Œμ΄μ§• μ‚¬μš©μ„ κ³ λ €ν•  μˆ˜λ„ μžˆμ—ˆμ§€λ§Œ μ§€κΈˆμ€ λ„ˆλ¬΄ λŠ¦μ—ˆμŠ΅λ‹ˆλ‹€.)

μ›ν•˜λŠ” μ†”λ£¨μ…˜ μ„€λͺ…

κ²Œμ‹œν•˜λŠ” λ™μ•ˆ cargo λŠ” ν¬λ ˆμ΄νŠΈκ°€ 이전에 κ²Œμ‹œλ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 첫 번째 κ²Œμ‹œμΈ 경우 cargo λŠ” μ‚¬μš©μžμ—κ²Œ λ‹€μ–‘ν•œ 크레이트 메타데이터λ₯Ό ν™•μΈν•˜λΌλŠ” λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. 특히, μ‚¬μš©μžλŠ” 크레이트 μ΄λ¦„μ˜ μ •ν™•ν•œ μ² μžμ™€ authors 의 λ‚΄μš©μ„ 확인해야 ν•©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” ν¬λ ˆμ΄νŠΈκ°€ κ²Œμ‹œλ˜λ©΄ 이 데이터λ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ μ œκ±°ν•  수 μžˆλŠ” 방법이 μ—†μŒμ„ μ•Œλ €μ•Ό ν•©λ‹ˆλ‹€.

초기 κ²Œμ‹œ ν›„ authors Cargo.toml λŒ€ν•œ λͺ…μ‹œμ  λ³€κ²½μ΄λ―€λ‘œ 이 확인은 ν•œ 번만 λ°œμƒν•˜λ©΄ λ©λ‹ˆλ‹€. λ˜λŠ” cargo new 의 μΌλΆ€λ‘œ μ €μž 자격 ν”„λ‘¬ν”„νŠΈλ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

일뢀 μƒμžλŠ” CI λ˜λŠ” 기타 슀크립트λ₯Ό 톡해 κ²Œμ‹œλ©λ‹ˆλ‹€. 이 μ‚¬μš© 사둀λ₯Ό μœ„λ°˜ν•˜μ§€ μ•ŠμœΌλ €λ©΄ 확인 및 ν”„λ‘¬ν”„νŠΈκ°€ λŒ€ν™”ν˜• TTYμ—μ„œλ§Œ λ°œμƒν•΄μ•Ό ν•©λ‹ˆλ‹€. --yes μŠ€νƒ€μΌ 인수λ₯Ό μΆ”κ°€ν•˜κ³  λΉ„λŒ€ν™”ν˜• 첫 번째 κ²Œμ‹œμ— λŒ€ν•΄ μΈμˆ˜κ°€ λˆ„λ½λœ 경우 κ²½κ³ ν•  수 μžˆμ§€λ§Œ λŒ€ν™”ν˜• ν”„λ‘¬ν”„νŠΈλ§ŒμœΌλ‘œλ„ μ—¬κΈ°μ„œ 놀라움을 κ²ͺλŠ” λŒ€λ‹€μˆ˜μ˜ μ‚¬μš©μžλ₯Ό λ‹€λ£° 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ…ΈνŠΈ

μœ„μ˜ λ„€ 번째 글머리 기호λ₯Ό 닀루기 μœ„ν•΄ μ‚¬μš©μžλ₯Ό μŠ€ν…Œμ΄μ§• λ ˆμ§€μŠ€νŠΈλ¦¬ ꡬ성 지침에 μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μš°μ„  μˆœμœ„λŠ” κ²Œμ‹œ ν›„ 크레이트 이름이 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ‚¬μš©μžμ—κ²Œ λͺ…ν™•ν•˜κ²Œ μ „λ‹¬ν•˜κ³  μžλ™ μƒμ„±λœ μ €μž‘κΆŒ 정보λ₯Ό κ³΅μœ ν•˜λŠ” 데 μ΅μˆ™ν•˜λ‹€λŠ” 것을 ν™•μΈν•˜λŠ” 것이어야 ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이둠적으둜 λŒ€μ²΄ λ ˆμ§€μŠ€νŠΈλ¦¬λ₯Ό μ‚¬μš©ν•˜λ©΄ μƒμžμ˜ 이름을 λ°”κΎΈκ±°λ‚˜ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 이것이 cargo 와 μƒνƒœκ³„μ˜ λ§Žμ€ 가정을 깨뜨릴 것이라고 μƒκ°ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 이 κ²€μ‚¬λŠ” λͺ¨λ“  λ ˆμ§€μŠ€νŠΈλ¦¬μ— μ μš©λ˜μ–΄μ•Ό ν•˜μ§€λ§Œ μ›ν•˜λŠ” 경우 crates.ioμ—λ§Œ μ μš©ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. (μ‚¬μš©μžμ—κ²Œ μŠ€ν…Œμ΄μ§•μ„ μ§€μ‹œν•˜κΈ°λ‘œ κ²°μ •ν–ˆλ‹€λ©΄ κΈ°λ³Έ crates.io λ ˆμ§€μŠ€νŠΈλ¦¬μ— λŒ€ν•΄μ„œλ§Œ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.)

C-feature-request Command-publish

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이에 λŒ€ν•œ λŒ€μ•ˆμ€ crates.ioκ°€ 기본적으둜 μƒˆ 크레이트λ₯Ό "ν…ŒμŠ€νŠΈ μ‹€ν–‰"ν•˜μ—¬ κ²Œμ‹œν•˜κ³  크레이트 κ²Œμ‹œμž/μ†Œμœ μžμ—κ²Œ 이메일을 보내 κ²Œμ‹œν•  κ²ƒμž„μ„ ν™•μΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν¬λ ˆμ΄νŠΈλŠ” 색인에 μΆ”κ°€λ˜μ§€ μ•ŠμœΌλ©° μ›Ή UI(λ˜λŠ” API)λ₯Ό 톡해 κ²Œμ‹œκ°€ 확인될 λ•ŒκΉŒμ§€ λ‹€μš΄λ‘œλ“œ 등에 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” μ—¬λŸ¬ 패치λ₯Ό μ—°μ†μ μœΌλ‘œ λΉ λ₯΄κ²Œ κ²Œμ‹œν•˜μ§€ μ•Šκ³  README λ˜λŠ” 기타 μœ μ‚¬ν•œ 메타데이터에 λŒ€ν•œ λ³€κ²½ 사항을 ν…ŒμŠ€νŠΈν•˜λŠ” κ²½μš°μ—λ„ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ κ΅¬ν˜„μ΄ 훨씬 더 μ–΄λ €μ›Œ 보이기 λ•Œλ¬Έμ— 이 문제의 μ œμ•ˆμ΄ 첫 번째 단계가 될 수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

이에 λŒ€ν•œ λŒ€μ•ˆμ€ crates.ioκ°€ 기본적으둜 μƒˆ 크레이트λ₯Ό "ν…ŒμŠ€νŠΈ μ‹€ν–‰"ν•˜μ—¬ κ²Œμ‹œν•˜κ³  크레이트 κ²Œμ‹œμž/μ†Œμœ μžμ—κ²Œ 이메일을 보내 κ²Œμ‹œν•  κ²ƒμž„μ„ ν™•μΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν¬λ ˆμ΄νŠΈλŠ” 색인에 μΆ”κ°€λ˜μ§€ μ•ŠμœΌλ©° μ›Ή UI(λ˜λŠ” API)λ₯Ό 톡해 κ²Œμ‹œκ°€ 확인될 λ•ŒκΉŒμ§€ λ‹€μš΄λ‘œλ“œ 등에 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” μ—¬λŸ¬ 패치λ₯Ό μ—°μ†μ μœΌλ‘œ λΉ λ₯΄κ²Œ κ²Œμ‹œν•˜μ§€ μ•Šκ³  README λ˜λŠ” 기타 μœ μ‚¬ν•œ 메타데이터에 λŒ€ν•œ λ³€κ²½ 사항을 ν…ŒμŠ€νŠΈν•˜λŠ” κ²½μš°μ—λ„ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ κ΅¬ν˜„μ΄ 훨씬 더 μ–΄λ €μ›Œ 보이기 λ•Œλ¬Έμ— 이 문제의 μ œμ•ˆμ΄ 첫 번째 단계가 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μž‘μ„±μžμ—κ²Œ μ„ΈλΆ€ 사항을 ν™•μΈν•˜λ„λ‘ μš”μ²­ν•˜λŠ” 것 외에도 CargoλŠ” 일반적인 μ‹€μˆ˜μ— λŒ€ν•œ 검사λ₯Ό κ΅¬ν˜„ν•˜κ³  이에 λŒ€ν•΄ κ²½κ³ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ²½κ³ : 크레이트 이름에 λŒ€λ¬Έμžκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. Rust 크레이트 이름은 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠμœΌλ©° λŒ€λΆ€λΆ„μ˜ ν¬λ ˆμ΄νŠΈλŠ” 일관성을 μœ„ν•΄ λͺ¨λ“  μ†Œλ¬Έμž 이름을 μ‚¬μš©ν•©λ‹ˆλ‹€.

κ²½κ³ : 크레이트 이름에 ν•˜μ΄ν”ˆμ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ½”λ“œμ—μ„œ 크레이트λ₯Ό μ‚¬μš©ν•  λ•Œ ν•˜μ΄ν”ˆμ€ λ°‘μ€„λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. 크레이트 이름에 ν•˜μ΄ν”ˆμ„ μ‚¬μš©ν•˜λ©΄ ν¬λ ˆμ΄νŠΈκ°€ μ½”λ“œμ—μ„œμ™€ crates.ioμ—μ„œ λ‹€λ₯Έ 이름을 κ°–κ²Œ λ©λ‹ˆλ‹€.

λ“±.

"ν…ŒμŠ€νŠΈ μ‹€ν–‰" κ²Œμ‹œ

이것은 λ‚˜μ—κ²Œ 있으면 쒋을 것인 ν₯미둜운 κΈ°λŠ₯ μš”μ²­ rust-lang/crates.io#1515λ₯Ό μƒκ°λ‚˜κ²Œ ν•©λ‹ˆλ‹€.

ν¬λ ˆμ΄νŠΈλŠ” 색인에 μΆ”κ°€λ˜μ§€ μ•ŠμœΌλ©° μ›Ή UI(λ˜λŠ” API)λ₯Ό 톡해 κ²Œμ‹œκ°€ 확인될 λ•ŒκΉŒμ§€ λ‹€μš΄λ‘œλ“œ 등에 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

이에 λŒ€ν•œ λ¬Έμ œκ°€ μ—†λ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ–΄λ””μ„ κ°€ crates.ioκ°€ 크레이트 μ΄λ¦„μ˜ μ‹œκ°„ μ œν•œ μ˜ˆμ•½μ„ ν—ˆμš©ν•  수 μžˆλ‹€λŠ” μ œμ•ˆμ„ λ³΄μ•˜μŠ΅λ‹ˆλ‹€(λͺ‡ κ°œμ›”λ§ˆλ‹€ μˆ˜λ™μœΌλ‘œ μƒˆλ‘œ κ³ μΉ  수 있음). 이름을 μ˜ˆμ•½ν•  수 μžˆλŠ” 인프라가 μžˆλ‹€λ©΄ κ·Έ μœ„μ— 첫 번째 κ²Œμ‹œλ₯Ό μœ„ν•œ 특수 μΌ€μ΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμ•½λœ μƒμžκ°€ 검색에 ν‘œμ‹œλ˜κ³  ν•΄λ‹Ή μƒμžκ°€ μ˜ˆμ•½λ˜μ—ˆκ±°λ‚˜ 보λ₯˜ μ€‘μ΄λΌλŠ” μΌμ’…μ˜ λžœλ”© νŽ˜μ΄μ§€κ°€ ν‘œμ‹œλ˜κΈ°λ₯Ό μ›ν•©λ‹ˆλ‹€. (그리고 μ˜ˆμ•½λœ 이름은 첫 번째 버전이 λ‚˜μ˜¬ λ•ŒκΉŒμ§€ ν˜Έν™˜λ˜λŠ” λ°©μ‹μœΌλ‘œ 쑰정될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŠ” μ—¬λŸ¬ 패치λ₯Ό μ—°μ†μ μœΌλ‘œ λΉ λ₯΄κ²Œ κ²Œμ‹œν•˜μ§€ μ•Šκ³  README λ˜λŠ” 기타 μœ μ‚¬ν•œ 메타데이터에 λŒ€ν•œ λ³€κ²½ 사항을 ν…ŒμŠ€νŠΈν•˜λŠ” κ²½μš°μ—λ„ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄ λΉ›λ‚˜λŠ” μƒˆ λ¦΄λ¦¬μŠ€μ— README에 λ¬Έμ œκ°€ μžˆλŠ” 것을 보고 λͺ‡ λΆ„ 후에 λ¦΄λ¦¬μŠ€κ°€ λ§Œλ“€μ–΄μ§€κΈ° λ•Œλ¬Έμ— 이 아이디어가 정말 μ’‹μŠ΅λ‹ˆλ‹€. μœ„μ˜ --dry-run[=verify] 및 첫 번째 κ²Œμ‹œ μ ‘κ·Ό 방식을 λ›°μ–΄λ„˜μŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” --dry-run=pending 둜 κ²Œμ‹œν•  수 있으며 버전은 보λ₯˜ μ€‘μœΌλ‘œ ν‘œμ‹œλ˜μ§€λ§Œ( yanked 와 μœ μ‚¬) 크레이트 μ†Œμœ μžλ§Œ 보λ₯˜ 쀑인 버전을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 특히 README의 경우 κ°€μž₯ 큰 λ¬Έμ œλŠ” S3μ—μ„œ 제곡될 λ•Œ μΊμ‹œλ  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€(ν˜„μž¬ 1일 λ™μ•ˆ). λ”°λΌμ„œ 보λ₯˜ 쀑인 버전에 λŒ€ν•΄ νŠΉλ³„ν•œ κ²½μš°κ°€ ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ κΈ°λŠ₯이 ν•¨κ»˜ 잘 μž‘λ™ν•˜κ³  점진적인 변경을 μœ„ν•œ 쒋은 경둜λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ˜ν•œ ν˜„μž¬λ‘œμ„œλŠ” 첫 번째 κ²Œμ‹œ μ„œλ²„ 츑의 특수 μΌ€μ΄μŠ€μ— λ§Žμ€ μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. 이 λͺ¨λ“  μ˜΅μ…˜μ„ 더 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰