From 95e7a2f2dbe7635367bcd0cbbae46a6347b45f40 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Sun, 24 Apr 2022 02:36:35 -0600 Subject: resolves #2065 set up fully automated release (PR #2069) [no ci] --- .github/workflows/release.yml | 32 ++++++++++++++--------- Rakefile | 2 ++ lib/asciidoctor/pdf/version.rb | 2 +- tasks/version.rb | 58 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 tasks/version.rb diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bb1cfc61..c6f5bd84 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,17 +1,20 @@ name: Release on: - push: - tags: ['v*'] + workflow_dispatch: + inputs: + release-version: + description: Enter version to release (e.g., 2.0.1). + required: false jobs: activate: - if: github.repository_owner == 'asciidoctor' runs-on: ubuntu-latest + if: github.repository_owner == 'asciidoctor' && github.event_name == 'workflow_dispatch' steps: - - name: Proceed - run: echo ok go - build: + - run: echo ok go + perform: needs: activate runs-on: ubuntu-latest + environment: releases env: ASCIIDOCTOR_DIAGRAM_VERSION: '~> 2.2' PRAWN_GMAGICK_VERSION: '0.0.9' @@ -24,19 +27,24 @@ jobs: uses: ruby/setup-ruby@v1 with: ruby-version: '3.1' + bundler-cache: false - name: Install Linux packages run: | sudo apt-get update sudo apt-get install ghostscript poppler-utils libgraphicsmagick1-dev - name: Configure Bundler run: | - bundle config --local path .bundle/gems - bundle config --local without coverage docs lint + bundle config --local path vendor/bundle + bundle config --local without coverage docs - name: Install dependencies run: bundle --jobs 3 --retry 3 - name: Run tests run: bundle exec rake spec - - name: Publish gem - uses: dawidd6/action-publish-gem@v1 - with: - api_key: ${{ secrets.RUBYGEMS_API_KEY }} + - name: Run linter + run: bundle exec rake lint + - name: Setup release environment + run: | + echo RELEASE_VERSION=${{ github.event.inputs.release-version }} >> $GITHUB_ENV + echo RELEASE_RUBYGEMS_API_KEY=${{ secrets[format('RUBYGEMS_API_KEY_{0}', github.actor)] }} >> $GITHUB_ENV + - name: Build, tag, and publish gem + run: ./release.sh diff --git a/Rakefile b/Rakefile index 405c9b17..0443554a 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,7 @@ # frozen_string_literal: true +require_relative 'gem-version-patch' + $default_tasks = [] # rubocop:disable Style/GlobalVars Dir.glob('tasks/*.rake').each {|file| load file } task default: $default_tasks unless $default_tasks.empty? # rubocop:disable Style/GlobalVars diff --git a/lib/asciidoctor/pdf/version.rb b/lib/asciidoctor/pdf/version.rb index ead6335c..f34b0a6f 100644 --- a/lib/asciidoctor/pdf/version.rb +++ b/lib/asciidoctor/pdf/version.rb @@ -2,6 +2,6 @@ module Asciidoctor module PDF - VERSION = '2.0.0.dev' + VERSION = '2.0.0-dev' end end diff --git a/tasks/version.rb b/tasks/version.rb new file mode 100644 index 00000000..fa27f87d --- /dev/null +++ b/tasks/version.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +require 'time' + +release_version = ENV['RELEASE_VERSION'] +prerelease = (release_version.count '[a-z]') > 0 ? %(.#{(release_version.split '.', 3)[-1]}) : nil +release_date = Time.now.strftime '%Y-%m-%d' +release_user = ENV['RELEASE_USER'] + +version_file = Dir['lib/**/version.rb'].first +readme_file = 'README.adoc' +changelog_file = 'CHANGELOG.adoc' +antora_file = 'docs/antora.yml' + +version_contents = (File.readlines version_file, mode: 'r:UTF-8').map do |l| + (l.include? 'VERSION') ? (l.sub %r/'[^']+'/, %('#{release_version}')) : l +end + +readme_contents = (File.readlines readme_file, mode: 'r:UTF-8').map do |l| + (l.start_with? ':release-version:') ? %(:release-version: #{release_version}\n) : l +end +if readme_contents[2].start_with? 'v' + readme_contents[2] = %(v#{release_version}, #{release_date}\n) +else + readme_contents.insert 2, %(v#{release_version}, #{release_date}\n) +end + +changelog_contents = File.readlines changelog_file, mode: 'r:UTF-8' +if (last_release_idx = changelog_contents.index {|l| (l.start_with? '== ') && (%r/^== \d/.match? l) }) + previous_release_version = (changelog_contents[last_release_idx].match %r/\d\S+/)[0] +else + last_release_idx = changelog_contents.length +end +changelog_contents.insert last_release_idx, <<~END +=== Details + +{url-repo}/releases/tag/v#{release_version}[git tag]#{previous_release_version ? %( | {url-repo}/compare/v#{previous_release_version}\\...v#{release_version}[full diff]) : ''} + +END +if (unreleased_idx = changelog_contents.index {|l| (l.start_with? '== Unreleased') && l.rstrip == '== Unreleased' }) + changelog_contents[unreleased_idx] = %(== #{release_version} (#{release_date}) - @#{release_user}\n) +else + changelog_contents.insert last_release_idx, <<~END + == #{release_version} (#{release_date}) - @#{release_user} + + _No changes since previous release._ + + END +end + +antora_contents = (File.readlines antora_file, mode: 'r:UTF-8').map do |l| + (l.start_with? 'prerelease:') ? %(prerelease: #{prerelease ? ?' + prerelease + ?' : 'false'}\n) : l +end + +File.write version_file, version_contents.join, mode: 'w:UTF-8' +File.write readme_file, readme_contents.join, mode: 'w:UTF-8' +File.write changelog_file, changelog_contents.join, mode: 'w:UTF-8' +File.write antora_file, antora_contents.join, mode: 'w:UTF-8' -- cgit v1.2.3