Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 34 additions & 33 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,52 +3,53 @@ name: Release
on:
push:
tags:
- 'v*'
- 'rollout/v*'
- 'rollout-redis/v*'

permissions:
contents: write
id-token: write

jobs:
release:
runs-on: ubuntu-latest
services:
redis:
image: redis:7-alpine
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Run core tests
run: bundle exec rspec spec
- name: Setup Redis adapter gems
uses: ruby/setup-ruby@v1
with:
working-directory: rollout-redis
bundler-cache: true
- name: Run Redis adapter tests
working-directory: rollout-redis
run: bundle exec rspec
ruby-version: '3.3'
- name: Select package
id: package
run: |
case "$GITHUB_REF_NAME" in
rollout/v*) name=rollout; directory=. ;;
rollout-redis/v*) name=rollout-redis; directory=rollout-redis ;;
*) echo "Unexpected tag $GITHUB_REF_NAME" >&2; exit 1 ;;
esac
version="${GITHUB_REF_NAME##*/v}"
spec_version=$(ruby -e 'puts Gem::Specification.load(ARGV[0]).version' "$directory/$name.gemspec")
if [ "$spec_version" != "$version" ]; then
echo "Tag version $version does not match gemspec $spec_version" >&2
exit 1
fi
echo "name=$name" >> "$GITHUB_OUTPUT"
echo "version=$version" >> "$GITHUB_OUTPUT"
echo "directory=$directory" >> "$GITHUB_OUTPUT"
- name: Build selected gem
working-directory: ${{ steps.package.outputs.directory }}
run: gem build "${{ steps.package.outputs.name }}.gemspec"
- name: Configure RubyGems credentials
uses: rubygems/configure-rubygems-credentials@v2.1.0
- name: Publish selected gem
working-directory: ${{ steps.package.outputs.directory }}
run: gem push "${{ steps.package.outputs.name }}-${{ steps.package.outputs.version }}.gem"
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref }}
name: ${{ github.ref_name }}
name: ${{ steps.package.outputs.name }} ${{ steps.package.outputs.version }}
generate_release_notes: true
draft: false
prerelease: false
- name: Set up RubyGems credentials
env:
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
run: |
mkdir -p ~/.gem
echo ":rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
chmod 0600 ~/.gem/credentials
- name: Release to RubyGems
run: bundle exec rake release
prerelease: false
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,11 +234,11 @@ Optional connection settings: `REDIS_HOST`, `REDIS_PORT`, `REDIS_DB`.

## Releasing

1. Bump version: `rake version:patch` (or `minor`/`major`)
2. Commit and tag: `git commit -am "Bump version" && git tag v0.7.3`
3. Push: `git push origin master --tags`
- Update and commit the version in `lib/rollout/version.rb` or `rollout-redis/rollout-redis.gemspec`.
- Tag the release commit with `rollout/vX.Y.Z` or `rollout-redis/vX.Y.Z`, matching the gem version.
- Push the tag with `git push origin <tag>`. CI publishes the selected gem and creates its GitHub release.

The GitHub Actions workflow will automatically publish to RubyGems when tags are pushed.
Use package-prefixed tags, not `vX.Y.Z`.

## Copyright

Expand Down
1 change: 0 additions & 1 deletion Rakefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# frozen_string_literal: true

require "bundler/gem_tasks"
require "rspec/core/rake_task"

RSpec::Core::RakeTask.new(:spec) do |task|
Expand Down
Loading