다음 CLI에 변경 로그를 추가하는 이유와 방법
8890 단어 go
--help
도움을 구하다--version
버전 확인--update
업데이트 가능--changelog
도 추가하지 못하는 이유는 무엇입니까?변경 로그를 추가하는 이유는 무엇입니까?
A. "소프트웨어의 완전한 패키지 조각"으로 자격을 부여하는 것은 CLI에 남아 있는 유일한 것이기 때문입니다.
B. 릴리스 정보를 읽는 것만으로도 명령의 잘못된 점을 디버깅하는 데 많은 시간을 절약할 수 있습니다.
어떻게?
변경 로그를 포함하는 방법에 대한 기술적인 부분을 살펴보기 전에 잘 관리되는 모든 오픈 소스 프로젝트에 일반적으로 포함되는 이와 같은 샘플
CHANGELOG.md
파일을 고려하십시오.# Changelog
All notable changes to this project will be documented in this file.
## [0.4] - Nov 11, 2019
### Added
- `getSubmissionDate()`, `getExitCode` new methods.
- Official Documentation.
### Changed
- Class Run `init` - Now you can pass _source code_, _input_ and _output_ to program as strings (limited to file paths in prior versions).
## [0.3] - Nov 9, 2019
### Added
- Removed redundant imports
- Added Module/Class docstrings for documentation
- Formatted Code
## [0.2] - Oct 31, 2019
### Changed
- Fix import requests problem.
## [0.1] - Oct 30, 2019
- Initial Release
이 형식은 keepachangelog에서 영감을 받았습니다. 이 형식을 사용하여 변경 로그 파서를 구축할 것입니다. 다음 golang 코드를 사용하여 요청된 버전의 변경 로그를 추출할 수 있습니다.
package main
import (
"fmt"
_ "embed"
"os"
"regexp"
"strings"
)
//go:embed CHANGELOG.md
var changelog string
func Parse(match string, rem string) string {
// remove the enclosing pattern of previous release from end of output
temp := strings.TrimSuffix(match, rem)
return strings.Trim(temp, "\r\n")
}
func main() {
// take care of special chars inside verison string
enclosingPattern := `## \[`
// prefixing verion number 0.6 with v won't work
ver := "0.3"
// Every header of new version looks like this: ## [1.4.0] - Jan 12, 2069
// regexp.MustCompile(`(?s)## \[0.6.*?## \[`)
var re = regexp.MustCompile(`(?s)` + enclosingPattern + ver + `.*?` + enclosingPattern)
submatchall := re.FindAllString(changelog, 1)
if len(submatchall) == 1 {
fmt.Println(Parse(submatchall[0], "## ["))
} else {
fmt.Println("No release notes found for version", ver)
os.Exit(0)
}
}
정규식은 분해할 수 있습니다.
(?s) + <enclosingPattern> + <version-number> + .* + </enclosingPattern>
(?s)
: 점이 줄바꿈 문자를 포함한 모든 문자와 일치하도록 합니다.*
: .
(점)은 모든 문자를 나타내고 *
는 이전 토큰다음은 샘플 출력입니다.
## [0.3] - Nov 9, 2019
### Added
- Removed redundant imports
- Added Module/Class docstrings for documentation
- Formatted Code
변경 로그와 함께 배송
Go를 사용하면 embedding static files inside go binaries을 지원하는 Go 1.16 릴리스 이후 훨씬 쉬워졌습니다.
위의 코드에서 이를 용이하게 하는
//go:embed
지시어에 주목하십시오. Go는 빌드 시간 동안 현재 디렉터리에 파일CHANGELOG.md
을 포함합니다.To learn more about embedding static files in Go use
go doc embed
출력 미화
glamour을 사용하여 마크다운 출력을 미화할 수도 있습니다.
Run
go get github.com/charmbracelet/glamour
to install glamour
위 코드 수정
...
if len(submatchall) == 1 {
cleanOutput := Parse(submatchall[0], "## [")
out, _ := glamour.Render(cleanOutput, "dark")
fmt.Print(out)
} else {
fmt.Println("No release notes found for version", ver)
os.Exit(0)
}
...
모습은 다음과 같습니다.
Reference
이 문제에 관하여(다음 CLI에 변경 로그를 추가하는 이유와 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bhupesh/why-and-how-to-add-changelog-in-your-next-cli-34fa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)