From cf7cd2f4ccbb270adb4ac18e3faf6bcab06cc809 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 11:59:39 -0500 Subject: [PATCH 01/11] Release gem workflow --- .github/workflows/release.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..abfdd11 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,22 @@ +name: Release Gem + +on: + push: + tags: + - 'v*' + paths: + - 'lib/stretchy/version.rb' + + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Publish gem + uses: dawidd6/action-publish-gem@v1 + with: + api_key: ${{secrets.RUBYGEMS_API_KEY}} + github_token: ${{secrets.GITHUB_TOKEN}} From 718d73a0be758a7fb56359c6a363d82e312da483 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 12:37:55 -0500 Subject: [PATCH 02/11] Update gem publishing workflow --- .github/workflows/release.yml | 14 ++++++++++---- .github/workflows/spec.yml | 12 +----------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index abfdd11..35ffb0f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,14 +9,20 @@ on: jobs: + spec: + uses: ./.github/workflows/spec.yml + build: runs-on: ubuntu-latest + needs: spec steps: - uses: actions/checkout@v4 - name: Publish gem - uses: dawidd6/action-publish-gem@v1 - with: - api_key: ${{secrets.RUBYGEMS_API_KEY}} - github_token: ${{secrets.GITHUB_TOKEN}} + if: contains(github.ref, 'refs/tags/v') + uses: cadwallion/publish-rubygems-action@master + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}} + RELEASE_COMMAND: rake release diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml index fb8e38f..6b28185 100644 --- a/.github/workflows/spec.yml +++ b/.github/workflows/spec.yml @@ -1,6 +1,7 @@ name: Ruby CI on: + workflow_call: pull_request: jobs: @@ -41,17 +42,6 @@ jobs: opensearch: runs-on: ${{matrix.os}}-latest - # services: - # opensearch: - # image: opensearchproject/opensearch:2 - # ports: - # - 9200:9200 - # env: - # discovery.type: single-node - # OPENSEARCH_JAVA_OPTS: "-Xms512m -Xmx512m" - # DISABLE_INSTALL_DEMO_CONFIG: true - # DISABLE_SECURITY_PLUGIN: true - # bootstrap.memory_lock: true strategy: matrix: From a990823cadfbf1ca2b502100f81c7b28068be833 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 19:24:45 -0500 Subject: [PATCH 03/11] Bump version to v0.3.1 --- lib/stretchy/version.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/stretchy/version.rb b/lib/stretchy/version.rb index 99b82e4..0ab80f1 100644 --- a/lib/stretchy/version.rb +++ b/lib/stretchy/version.rb @@ -1,5 +1,3 @@ -# frozen_string_literal: true - module Stretchy - VERSION = "0.3.0" + VERSION = '0.3.1' end From 4c5565690cb1616d41153dfca15297a856880247 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 19:26:15 -0500 Subject: [PATCH 04/11] Add publish release workflow --- .github/workflows/release.yml | 8 ++-- .github/workflows/spec.yml | 2 - Rakefile | 75 +++++++++++++++++++++++++++++++++++ stretchy-model.gemspec | 2 + 4 files changed, 82 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 35ffb0f..b540661 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,6 +2,8 @@ name: Release Gem on: push: + branches: + - main tags: - 'v*' paths: @@ -9,12 +11,12 @@ on: jobs: - spec: - uses: ./.github/workflows/spec.yml + # spec: + # uses: ./.github/workflows/spec.yml build: runs-on: ubuntu-latest - needs: spec + # needs: spec steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml index 6b28185..756fb32 100644 --- a/.github/workflows/spec.yml +++ b/.github/workflows/spec.yml @@ -14,8 +14,6 @@ jobs: os: ['ubuntu'] ruby: ['3.1', '2.7'] elasticsearch: ['7.x-SNAPSHOT', '8.12.2'] - # opensearch: ['2.12.0'] - steps: - uses: actions/checkout@v4 diff --git a/Rakefile b/Rakefile index cd510a0..897082f 100644 --- a/Rakefile +++ b/Rakefile @@ -2,3 +2,78 @@ require "bundler/gem_tasks" task default: %i[] + +require 'octokit' +require 'versionomy' + + +def determine_new_version(version) + # Load current version + load 'lib/stretchy/version.rb' + current_version = Versionomy.parse(Stretchy::VERSION) + + # Determine new version + case version.to_sym + when :major + current_version.bump(:major) + when :minor + current_version.bump(:minor) + when :patch + current_version.bump(:tiny) + else + Versionomy.parse(version) + end +end + +def create_release_branch(new_version, base_branch) + system("git fetch origin #{base_branch}") + branch_name = "release/v#{new_version}" + system("git checkout -b #{branch_name} #{base_branch}") + branch_name +end + +def update_version_file(new_version) + # Update lib/stretchy/version.rb + File.open('lib/stretchy/version.rb', 'w') do |file| + file.puts "module Stretchy\n VERSION = '#{new_version}'\nend" + end +end + +def commit_and_push_changes(new_version, branch_name) + system("git add lib/stretchy/version.rb") + system("git commit -m 'Bump version to v#{new_version}'") + system("git push origin #{branch_name}") +end + +def create_pull_request(new_version, base_branch, branch_name) + # Create a pull request + client = Octokit::Client.new(access_token: ENV['GITHUB_TOKEN']) + client.create_pull_request('theablefew/stretchy', base_branch, branch_name, "Release v#{new_version}") +end + +namespace :publish do + desc "Create a release" + task :release, [:version, :base_branch] do |t, args| + args.with_defaults(version: :patch, base_branch: 'main') + version = args[:version] + base_branch = args[:base_branch] + + new_version = determine_new_version(version) + branch_name = create_release_branch(new_version, base_branch) + update_version_file(new_version) + commit_and_push_changes(new_version, branch_name) + create_pull_request(new_version, base_branch, branch_name) + end + + task :major do + Rake::Task['publish:release'].invoke('major') + end + + task :minor do + Rake::Task['publish:release'].invoke('minor') + end + + task :patch do + Rake::Task['publish:release'].invoke('patch') + end +end diff --git a/stretchy-model.gemspec b/stretchy-model.gemspec index fd26457..f0c0e4f 100644 --- a/stretchy-model.gemspec +++ b/stretchy-model.gemspec @@ -45,6 +45,8 @@ Gem::Specification.new do |spec| spec.add_development_dependency "simplecov", "~> 0.21.2" spec.add_development_dependency "yard", "~> 0.9.36" spec.add_development_dependency "opensearch-ruby", "~> 3.0" + spec.add_development_dependency "octokit", "~> 4.20" + spec.add_development_dependency "versionomy", "~> 0.5.0" # For more information and examples about making a new gem, check out our # guide at: https://bundler.io/guides/creating_gem.html end From 65e06c74e714ae2c11da5863863cb241147f6b10 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 19:34:56 -0500 Subject: [PATCH 05/11] Rollback on failed publish --- Rakefile | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index 897082f..431fba7 100644 --- a/Rakefile +++ b/Rakefile @@ -6,11 +6,15 @@ task default: %i[] require 'octokit' require 'versionomy' - -def determine_new_version(version) +def determine_current_version # Load current version load 'lib/stretchy/version.rb' current_version = Versionomy.parse(Stretchy::VERSION) +end + +def determine_new_version(version) + # Load current version + current_version = determine_current_version # Determine new version case version.to_sym @@ -58,11 +62,19 @@ namespace :publish do version = args[:version] base_branch = args[:base_branch] + old_version = determine_current_version new_version = determine_new_version(version) branch_name = create_release_branch(new_version, base_branch) + begin update_version_file(new_version) commit_and_push_changes(new_version, branch_name) create_pull_request(new_version, base_branch, branch_name) + rescue => e + puts "Error: #{e.message}" + puts "Rolling back changes" + system("git checkout #{base_branch}") + system("git branch -D #{branch_name}") + end end task :major do From f6744933037b0e62bfd76fdb3066f1d1c6aa64ed Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 20:07:17 -0500 Subject: [PATCH 06/11] Bump version to v0.3.2 --- lib/stretchy/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stretchy/version.rb b/lib/stretchy/version.rb index 0ab80f1..02e9153 100644 --- a/lib/stretchy/version.rb +++ b/lib/stretchy/version.rb @@ -1,3 +1,3 @@ module Stretchy - VERSION = '0.3.1' + VERSION = '0.3.2' end From 7ccf569c293640720e0487e4fd08323f9bc9f8c0 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 20:17:57 -0500 Subject: [PATCH 07/11] Fix publish release --- Rakefile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Rakefile b/Rakefile index 431fba7..dd0f279 100644 --- a/Rakefile +++ b/Rakefile @@ -12,9 +12,9 @@ def determine_current_version current_version = Versionomy.parse(Stretchy::VERSION) end -def determine_new_version(version) +def determine_new_version(version=nil) # Load current version - current_version = determine_current_version + current_version = version || determine_current_version # Determine new version case version.to_sym @@ -46,12 +46,13 @@ end def commit_and_push_changes(new_version, branch_name) system("git add lib/stretchy/version.rb") system("git commit -m 'Bump version to v#{new_version}'") - system("git push origin #{branch_name}") + system("git tag v#{new_version}") + system("git push origin #{branch_name} --tags") end def create_pull_request(new_version, base_branch, branch_name) # Create a pull request - client = Octokit::Client.new(access_token: ENV['GITHUB_TOKEN']) + client = Octokit::Client.new(access_token: ENV['GH_TOKEN']) client.create_pull_request('theablefew/stretchy', base_branch, branch_name, "Release v#{new_version}") end @@ -72,6 +73,7 @@ namespace :publish do rescue => e puts "Error: #{e.message}" puts "Rolling back changes" + system("git tag -d v#{new_version}") system("git checkout #{base_branch}") system("git branch -D #{branch_name}") end From bc6e28091ff22ad624f1c5b48c2ffe50a44626b2 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 20:21:52 -0500 Subject: [PATCH 08/11] Bump version to v0.3.3 --- lib/stretchy/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stretchy/version.rb b/lib/stretchy/version.rb index 02e9153..1fd5eac 100644 --- a/lib/stretchy/version.rb +++ b/lib/stretchy/version.rb @@ -1,3 +1,3 @@ module Stretchy - VERSION = '0.3.2' + VERSION = '0.3.3' end From debc76df8fc51991bde71dd24c3d88da3e3c7607 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 20:22:38 -0500 Subject: [PATCH 09/11] Fix publish release --- Rakefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Rakefile b/Rakefile index dd0f279..78cfd28 100644 --- a/Rakefile +++ b/Rakefile @@ -5,6 +5,7 @@ task default: %i[] require 'octokit' require 'versionomy' +require 'rainbow' def determine_current_version # Load current version @@ -12,9 +13,9 @@ def determine_current_version current_version = Versionomy.parse(Stretchy::VERSION) end -def determine_new_version(version=nil) +def determine_new_version(version) # Load current version - current_version = version || determine_current_version + current_version = determine_current_version # Determine new version case version.to_sym @@ -25,7 +26,7 @@ def determine_new_version(version=nil) when :patch current_version.bump(:tiny) else - Versionomy.parse(version) + version =~ /\Av\d+\.\d+\.\d+\z/ ? Versionomy.parse(version) : current_version end end @@ -65,6 +66,7 @@ namespace :publish do old_version = determine_current_version new_version = determine_new_version(version) + puts Rainbow("Bumping version from #{old_version} to #{new_version}").green branch_name = create_release_branch(new_version, base_branch) begin update_version_file(new_version) From 0eb726cd3c5f524d8618b836018356825fcf8ad9 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 20:23:33 -0500 Subject: [PATCH 10/11] Bump version to v0.3.1 --- lib/stretchy/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stretchy/version.rb b/lib/stretchy/version.rb index 1fd5eac..0ab80f1 100644 --- a/lib/stretchy/version.rb +++ b/lib/stretchy/version.rb @@ -1,3 +1,3 @@ module Stretchy - VERSION = '0.3.3' + VERSION = '0.3.1' end From ac36eb283cc8a70a09ff4c107603c6434e27e844 Mon Sep 17 00:00:00 2001 From: Spencer Markowski Date: Wed, 6 Mar 2024 20:35:13 -0500 Subject: [PATCH 11/11] Reset version --- Rakefile | 1 + lib/stretchy/version.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 78cfd28..3675362 100644 --- a/Rakefile +++ b/Rakefile @@ -31,6 +31,7 @@ def determine_new_version(version) end def create_release_branch(new_version, base_branch) + system("git stash save 'Changes before creating release branch'") system("git fetch origin #{base_branch}") branch_name = "release/v#{new_version}" system("git checkout -b #{branch_name} #{base_branch}") diff --git a/lib/stretchy/version.rb b/lib/stretchy/version.rb index 0ab80f1..c0bb1a1 100644 --- a/lib/stretchy/version.rb +++ b/lib/stretchy/version.rb @@ -1,3 +1,3 @@ module Stretchy - VERSION = '0.3.1' + VERSION = '0.3.0' end