From b12d2ba62d469203036bbe8944157a5b9620baf7 Mon Sep 17 00:00:00 2001 From: xuan-cao-swi Date: Tue, 20 Jan 2026 19:46:30 -0500 Subject: [PATCH 1/2] NH-128063: use standard rake release --- AGENTS.md | 3 ++- Rakefile | 26 +------------------------- 2 files changed, 3 insertions(+), 26 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index ac2a9510..a2eab29e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -168,7 +168,8 @@ bundle exec rake push_gem_to_github_package[7.1.0] **For maintainers only:** ```bash -bundle exec rake build_and_publish_gem +gem build solarwinds_apm.gemspec +gem push solarwinds_apm-{version}.gem ``` Requires `GEM_HOST_API_KEY` environment variable and gem >= 3.0.5. diff --git a/Rakefile b/Rakefile index e976c686..0e32df8d 100755 --- a/Rakefile +++ b/Rakefile @@ -14,6 +14,7 @@ require 'optparse' require 'digest' require 'open-uri' require 'bundler/setup' +require 'bundler/gem_tasks' require 'rake/testtask' Rake::TestTask.new do |t| @@ -113,31 +114,6 @@ def docker_cmd_execute(cmd) end ################ Build Gem Task ################ - -desc 'Build and publish to Rubygems' -# !!! publishing requires gem >=3.0.5 !!! -# Don't run with Ruby versions < 2.7 they have gem < 3.0.5 -task :build_and_publish_gem do - gemspec_file = 'solarwinds_apm.gemspec' - gemspec = Gem::Specification.load(gemspec_file) - gem_file = "#{gemspec.full_name}.gem" - - exit 1 unless system('gem', 'build', gemspec_file) - - exit 1 if ENV['GEM_HOST_API_KEY'] && !system('gem', 'push', gem_file) -end - -desc 'Build and publish to Rubygems (alias for GitHub Actions compatibility)' -task :release do - gemspec_file = 'solarwinds_apm.gemspec' - gemspec = Gem::Specification.load(gemspec_file) - gem_file = "#{gemspec.full_name}.gem" - - exit 1 unless system('gem', 'build', gemspec_file) - - exit 1 unless system('gem', 'push', gem_file) -end - desc 'Build gem locally for testing' task :build_gem do puts "\n=== building for MRI ===\n" From 77b27265956562ee63f57d1da6c69748edf59382 Mon Sep 17 00:00:00 2001 From: xuan-cao-swi Date: Wed, 21 Jan 2026 17:18:45 -0500 Subject: [PATCH 2/2] NH-128063: use rake build to build gem --- .../workflows/build_for_github_package.yml | 24 +++---- AGENTS.md | 16 ++--- Rakefile | 63 ------------------- 3 files changed, 18 insertions(+), 85 deletions(-) diff --git a/.github/workflows/build_for_github_package.yml b/.github/workflows/build_for_github_package.yml index 54c5395c..c0b3c130 100644 --- a/.github/workflows/build_for_github_package.yml +++ b/.github/workflows/build_for_github_package.yml @@ -27,19 +27,23 @@ jobs: echo 'gem: --no-document' >> ~/.gemrc bundle install - - name: Grab current version + - name: Build gem + run: bundle exec rake build + + - name: Extract version from built gem id: version run: | - echo "gem_version=`ruby -e 'require "./lib/solarwinds_apm/version"; puts SolarWindsAPM::Version::STRING'`" >> $GITHUB_OUTPUT + GEM_FILE=$(ls pkg/solarwinds_apm-*.gem | head -1) + VERSION=$(basename "$GEM_FILE" .gem | sed 's/solarwinds_apm-//') + echo "gem_version=$VERSION" >> $GITHUB_OUTPUT - - name: Build gem and publish to github package + - name: Publish to github package id: gemstep run: | - mkdir ~/.gem + mkdir -p ~/.gem echo -e "---\n:github: Bearer $GITHUB_SECRET_TOKEN" >> ~/.gem/credentials chmod 0600 ~/.gem/credentials - bundle exec rake build_gem_for_github_package[${{ steps.version.outputs.gem_version }}] - bundle exec rake push_gem_to_github_package[${{ steps.version.outputs.gem_version }}] + gem push --key github --host https://rubygems.pkg.github.com/solarwinds pkg/solarwinds_apm-${{ steps.version.outputs.gem_version }}.gem env: GITHUB_SECRET_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -47,15 +51,13 @@ jobs: uses: actions/upload-artifact@v6 with: name: solarwinds_apm-${{ steps.version.outputs.gem_version }}.gem - path: builds/solarwinds_apm-${{ steps.version.outputs.gem_version }}.gem + path: pkg/solarwinds_apm-${{ steps.version.outputs.gem_version }}.gem # extract the built layer from artifacts, then scan it with reverselab reverselab_scan_gem: needs: - publish_to_github_package runs-on: ubuntu-latest - strategy: - fail-fast: false steps: - uses: actions/checkout@v6 @@ -64,7 +66,7 @@ jobs: uses: actions/download-artifact@v7 with: name: solarwinds_apm-${{ env.SOLARWINDS_APM_VERSION }}.gem - path: builds + path: pkg env: SOLARWINDS_APM_VERSION: ${{needs.publish_to_github_package.outputs.apm_ruby_version}} @@ -72,7 +74,7 @@ jobs: id: rl-scan uses: reversinglabs/gh-action-rl-scanner-cloud-only@v1 with: - artifact-to-scan: builds/solarwinds_apm-${{ env.SOLARWINDS_APM_VERSION }}.gem + artifact-to-scan: pkg/solarwinds_apm-${{ env.SOLARWINDS_APM_VERSION }}.gem rl-verbose: true rl-portal-server: solarwinds rl-portal-org: SolarWinds diff --git a/AGENTS.md b/AGENTS.md index a2eab29e..9fe170cd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -142,25 +142,19 @@ See [CONTRIBUTING.md](CONTRIBUTING.md#code-quality) for details. For local testing: ```bash -bundle exec rake build_gem +bundle exec rake build ``` -Output: `builds/solarwinds_apm-X.Y.Z.gem` +Output: `pkg/solarwinds_apm-X.Y.Z.gem` The script shows SHA256 checksum and lists the last 5 built gems. -### Build for GitHub Packages - -```bash -bundle exec rake build_gem_for_github_package[7.1.0] -``` - ### Push to GitHub Packages Requires credentials in `~/.gem/credentials`: ```bash -bundle exec rake push_gem_to_github_package[7.1.0] +gem push --key github --host https://rubygems.pkg.github.com/solarwinds pkg/solarwinds_apm-7.1.0.gem ``` ### Build and Publish to RubyGems @@ -168,8 +162,8 @@ bundle exec rake push_gem_to_github_package[7.1.0] **For maintainers only:** ```bash -gem build solarwinds_apm.gemspec -gem push solarwinds_apm-{version}.gem +bundle exec rake build +gem push pkg/solarwinds_apm-{version}.gem ``` Requires `GEM_HOST_API_KEY` environment variable and gem >= 3.0.5. diff --git a/Rakefile b/Rakefile index 0e32df8d..a0a649fe 100755 --- a/Rakefile +++ b/Rakefile @@ -113,69 +113,6 @@ def docker_cmd_execute(cmd) end end -################ Build Gem Task ################ -desc 'Build gem locally for testing' -task :build_gem do - puts "\n=== building for MRI ===\n" - FileUtils.mkdir_p('builds') if Dir['builds'].empty? - File.delete('Gemfile.lock') if Dir['Gemfile.lock'].size == 1 - - puts "\n=== install required dependencies ===\n" - system('bundle install --without development --without test') - - puts "\n=== clean & compile & build ===\n" - system('gem build solarwinds_apm.gemspec') - - gemname = Dir['solarwinds_apm*.gem'].first - FileUtils.mv(gemname, 'builds/') - - built_gem = Dir['builds/solarwinds_apm*.gem'] - - puts "\n=== last 5 built gems ===\n" - puts built_gem - - puts "\n=== SHA256 ===\n" - system("shasum -a256 #{built_gem.first}") - - puts "\n=== Finished ===\n" -end - -def find_or_build_gem(version) - abort('No version specified.') if version.to_s.empty? - - gems = Dir["builds/solarwinds_apm-#{version}.gem"] - gem_to_push = nil - if gems.empty? - Rake::Task['build_gem'].execute - gem_to_push = Dir['builds/solarwinds_apm*.gem'].first - else - gem_to_push = gems.first - end - - puts "\n=== Gem will be pushed #{gem_to_push} ===" - gem_to_push_version = gem_to_push&.match(/-\d*.\d*.\d*/).to_s.delete!('-') - gem_to_push_version = gem_to_push&.match(/-\d*.\d*.\d*.prev[0-9]*/).to_s.delete!('-') if version.include? 'prev' - - abort('Could not find the required gem file.') if gem_to_push.nil? || gem_to_push_version != version - - gem_to_push -end - -# need set the credentials under ~/.gem/credentials -# for download, easiest way is to set BUNDLE_RUBYGEMS__PKG__GITHUB__COM -# but there are other auth methods. see more on https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry -desc 'Push to github package. Run as bundle exec rake build_gem_push_to_github_package[]' -task :push_gem_to_github_package, [:version] do |_, args| - exit 1 unless system('gem', 'push', '--key', 'github', '--host', 'https://rubygems.pkg.github.com/solarwinds', - "builds/solarwinds_apm-#{args[:version]}.gem") - puts "\n=== Finished ===\n" -end - -desc 'Build gem for github package' -task :build_gem_for_github_package, [:version] do |_, args| - find_or_build_gem(args[:version]) -end - desc 'Run rubocop and generate result. Run as bundle exec rake rubocop If want to safely autocorrect enabled, just use bundle exec rake rubocop auto-safe If want to all autocorrect enabled, just use bundle exec rake rubocop auto-all