summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Allen <dan.j.allen@gmail.com>2022-04-24 02:36:35 -0600
committerGitHub <noreply@github.com>2022-04-24 02:36:35 -0600
commit95e7a2f2dbe7635367bcd0cbbae46a6347b45f40 (patch)
tree4b4acbc1d947a71ae8e6a3e87dde05859a899001
parentfbb10b12c446b3e4bbdeef239c5e148f029de5ce (diff)
resolves #2065 set up fully automated release (PR #2069) [no ci]
-rw-r--r--.github/workflows/release.yml32
-rw-r--r--Rakefile2
-rw-r--r--lib/asciidoctor/pdf/version.rb2
-rw-r--r--tasks/version.rb58
4 files changed, 81 insertions, 13 deletions
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'