GitHub 운영 자동화 Ruby Gem 릴리스
석방해 주십시오
Release Please Action는 구글이 만든 GitHub 조작으로 Conventional Commit Messages를 통해 자동으로 발표하는 데 사용된다.PR을 기본 분기에 결합하면 해당 분기는 변경 로그에 자동으로 커밋을 추가하고 커밋에 따라 버전을 수정하는 새 게시 분기를 작성/업데이트합니다.결합 PR은 변경 내용을 게시할 준비가 되면 새 GitHub 버전을 작성하고 게시합니다.우리는 심지어 가방 등록 센터에 자동으로 발표할 수 있다. 예를 들어RubyGems!
일반적인 승낙
본문은 당신이 익숙하다고 가정합니다Conventional Commits.다음은 the action's README에서 추출한 중요한 접두사에 대한 간략한 개술이다.
당신이 기억해야 할 가장 중요한 접두사는:
fix
: 오류가 수정되었으며 SemVer 패치와 관련이 있음을 나타냅니다.feat
: 새 피쳐를 나타내며 SemVer 단조와 연관됩니다.feat!
:, 또는 fix!:
,refactor!:
등은 하나의 돌파적인 변화를 대표한다(유래반은 일하고 반은 공부하는 전공을 초래할 것이다.테스트
이 작업의 기능을 설명하기 위해 새gem을 만들 것입니다.
bundler gem release-please-demo --test=rspec --ci=github
cd release-please-demo
bundle install
Skip to the bottom if you'd just like to see the result!
다음에 Gem를 발표하려면 Gempec를 업데이트해야 합니다.나는 지금 이 문제를 토론할 생각은 없지만, 만약 당신이 Ruby gem 규범을 어떻게 설정하는지에 대한 정보를 더 알고 싶다면, 나는 checking out this great article by Piotr Murach를 건의합니다.
이것이 바로 나의
release-please-demo.gemspec
모습이다.# frozen_string_literal: true
require_relative "lib/release/please/demo/version"
Gem::Specification.new do |spec|
spec.name = "release-please-demo"
spec.version = Release::Please::Demo::VERSION
spec.authors = ["Andrew Mason"]
spec.email = ["[email protected]"]
spec.summary = "Demo of release-please."
spec.description = "A demo gem showing how to use release-please to automatically version gems."
spec.homepage = "https://github.com/andrewmcodes/release-please-demo"
spec.license = "MIT"
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
spec.metadata = {
"bug_tracker_uri" => "#{spec.homepage}/issues",
"changelog_uri" => "#{spec.homepage}/blob/main/CHANGELOG.md",
"documentation_uri" => spec.homepage.to_s,
"homepage_uri" => spec.homepage.to_s,
"source_code_uri" => spec.homepage.to_s
}
spec.files = Dir.chdir(File.expand_path(__dir__)) do
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
end
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]
end
본 논문의 목적은 발표 주기에 주목하는 것이기 때문에, Bundler가 구축한gem을 사용할 것입니다. 코드 변경은 없습니다.자신의gem를 구축하고 있다면, 이것은gem에 기능을 추가할 부분입니다.행동을 설정하다
EMC 의 발표 전략 구축:
touch .github/workflows/release.yml
선택한 코드 편집기에서 이것을 엽니다.우선, 우리는 작업의 이름과 실행 시간을 설정해야 한다.이 작업은 워크플로우에 따라 일부 컨텐트를 기본 분기 또는 게시 분기로 병합할 때만 실행되기를 원합니다.기본 지점을main이라고 명명하기 때문에 코드gems를main으로 전송할 때마다 이 동작을 실행합니다.
# .github/workflows/release.yml
name: release
on:
push:
branches:
- main
다음에 우리는 Release Please Action에 숙제를 설치해야 한다.옵션 설명에는 설명이 있지만 view the official configuration documentation 자세한 내용을 참조하십시오.jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: GoogleCloudPlatform/release-please-action@v2
id: release
with:
# The release type
release-type: ruby
# A name for the artifact releases are being created for
# which is the name of our gem
package-name: release-please-demo
# Should breaking changes before 1.0.0 produce minor bumps?
bump-minor-pre-major: true
# Path to our version file to increment
version-file: "lib/release/please/demo/version.rb"
우리는 1초 안에 더 멋진 일을 할 것이지만, 이것이 무슨 일이 일어날지 계속 봅시다.새로운 GitHub 재구매 계약을 작성하여 모든 내용을 제출하고 확대합니다.주의해야 할 것은 Bundler가 gm을 구축할 때 기본적으로 실패한 테스트 조건을 추가합니다. 따라서 gm을 만들 때 --ci=github
로고를 추가하면 생성된 .github/workflows/main.yml
작업은 실패한 테스트를 삭제하지 않으면 실패합니다.내가 지금 니가 직접 디버깅하라고.변경 사항을 주 지점으로 밀어넣으면 발표 작업이 실행됩니다.당신의 초기 달리기 출력은 다음과 같아야 합니다.
Run GoogleCloudPlatform/release-please-action@v2
✖ No merged release PR found
✖ Unable to build candidate
✔ found 4 commits since beginning of time
✖ no user facing commits found since beginning of time
출력 표시:git log --one-line
입니다. 따라서 4개의 제출을 볼 수 있습니다.9a4d62b (HEAD -> main, origin/main) build: add release action (#1)
1b0bcd4 chore: bundle install
7a30c6d chore: update gemspec
c793bca chore: initial commit
보시다시피 아무런 기능이나 수정이 없기 때문에 이 작업은 발표 PR을 만들지 않았습니다.게시 작성
나는 하나의 특성에 대해 사기와 빈 제출을 진행할 것이다.
git commit --allow-empty -m "feat: add a feature"
git push -u origin main
게시 작업을 실행해야 합니다. 이번에 제출을 마주한 사용자를 찾아서 새 게시 PR을 엽니다. PR은 버전 번호를 추가하고 기존 변경 로그를 새로 만들거나 편집합니다.주의: 이전 버전이 없는gem에 대해서는 전체 버전의 발표를 막을 방법을 찾을 수 없습니다.통합하기 전에 원하는 초기 버전 번호와 일치하도록 PR을 편집하고 발표할 수 있습니다.이것은 이전 버전의 항목을 가진 문제가 아니다.
RubyGems에 게시
만약 우리가 변경 로그의 생성과 버전 제어만 자동화하고 싶다면, 현재의 설정은 매우 좋으나, 버전이 발표된 후에도, 우리는gem를 스스로 발표해야 한다.다행히도 우리는 기존의 작업 절차에 연결하여 발표 자동화를 실현할 수 있습니다!
우리의 첫 번째 id는
release
라는 것을 알 수 있습니다.이렇게 하면 우리는 다른 단계에서 이 단계의 출력을 검사하고 이에 상응하여 행동을 취할 수 있다.단계 설정
게시 단계의 출력이
release_created
인 경우 리포를 체크 아웃하고 Ruby를 설치한 다음 실행bundle install
합니다.jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: GoogleCloudPlatform/release-please-action@v2
id: release
with:
release-type: ruby
package-name: release-please-demo
bump-minor-pre-major: true
version-file: "lib/release/please/demo/version.rb"
# Checkout code if release was created
- uses: actions/checkout@v2
if: ${{ steps.release.outputs.release_created }}
# Setup ruby if a release was created
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0.0
if: ${{ steps.release.outputs.release_created }}
# Bundle install
- run: bundle install
if: ${{ steps.release.outputs.release_created }}
게시 단계
게시되면 Gem 자격 증명을 설정하고 Gem을 구축하여 Ruby Gems로 전송합니다.
get an API token from RubyGems와add it to your repository secrets가 필요합니다.나는 내 이름
RUBYGEMS_AUTH_TOKEN
을 붙였지만, 너는 원하는 대로 이름을 설정할 수 있다.- name: publish gem
run: |
mkdir -p $HOME/.gem
touch $HOME/.gem/credentials
chmod 0600 $HOME/.gem/credentials
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
gem build *.gemspec
gem push *.gem
env:
# Make sure to update the secret name
# if yours isn't named RUBYGEMS_AUTH_TOKEN
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
if: ${{ steps.release.outputs.release_created }}
주의: 나는 직접 GitHub's action documentation에서 이 코드를 얻었다.발포
우리의 마지막 행동:
# .github/workflows/release.yml
name: release
on:
push:
branches:
- main
jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: GoogleCloudPlatform/release-please-action@v2
id: release
with:
release-type: ruby
package-name: release-please-demo
bump-minor-pre-major: true
version-file: "lib/release/please/demo/version.rb"
# Checkout code if release was created
- uses: actions/checkout@v2
if: ${{ steps.release.outputs.release_created }}
# Setup ruby if a release was created
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0.0
if: ${{ steps.release.outputs.release_created }}
# Bundle install
- run: bundle install
if: ${{ steps.release.outputs.release_created }}
# Publish
- name: publish gem
run: |
mkdir -p $HOME/.gem
touch $HOME/.gem/credentials
chmod 0600 $HOME/.gem/credentials
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
gem build *.gemspec
gem push *.gem
env:
# Make sure to update the secret name
# if yours isn't named RUBYGEMS_AUTH_TOKEN
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
if: ${{ steps.release.outputs.release_created }}
이 코드를 제출하고 전송하며 게시 PR이 업데이트될 때까지 저희 action bot에서 기다립니다.릴리즈 PR을 업데이트한 후 PR을 주 브랜치에 결합합니다.게시 작업이 실행되면 GitHub에서 새로운 게시를 볼 수 있습니다.이 작업의 중요한 특징 중 하나는 변경 로그 항목에 따라 발행 설명을 생성하는 것입니다.🚀
만약 우리가 Ruby Gems를 본다면, 우리는 우리의 새로운 창업 보드가 이미 발표되고 공유될 준비가 되어 있음을 보게 될 것이다.
마지막 생각
만약 당신이 강좌를 따르고 새로운 보석을 사용하지 않으려면 다른 사람들이 미래에 이 이름을 사용할 수 있도록 뽑아야 한다.
gem yank release-please-demo -v 1.0.0
이 작업의 중요한 부분 중 하나는 다른 언어나 .txt
파일과 함께 사용할 수 있고 모든 오픈 소스 코드에서 일치하는 패턴을 만들 수 있다는 것이다.게시하기 전에 테스트를 실행할 수 있도록 검사를 추가할 수 있고, 일반적인 제출을 사용할 수 있도록 linter를 추가할 수 있습니다.이 작업 절차가 있으면, 코드를 뜯을 필요도, 프로젝트를 다시 시도하고 기억할 필요도 없이, 새로운 버전을 쉽게 발표할 수 있다.해봐, 네 생각을 말해줘!
Reference
이 문제에 관하여(GitHub 운영 자동화 Ruby Gem 릴리스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andrewmcodes/automating-ruby-gem-releases-with-github-actions-1m1c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)