Skip to content

Commit be6ff3d

Browse files
committed
Adds a shared pipeline for MSF gems verify workflow
1 parent be7715d commit be6ff3d

File tree

2 files changed

+170
-0
lines changed

2 files changed

+170
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
name: Shared Gem Verify
2+
on:
3+
workflow_call:
4+
inputs:
5+
test_commands:
6+
description: 'Test commands'
7+
required: false
8+
default: "bundle exec rspec"
9+
type: string
10+
dependencies:
11+
description: 'Array of system dependencies to install'
12+
required: false
13+
default: "[]"
14+
type: string
15+
16+
jobs:
17+
test:
18+
runs-on: ${{ matrix.os }}
19+
timeout-minutes: 40
20+
21+
strategy:
22+
fail-fast: true
23+
matrix:
24+
ruby:
25+
- '3.2'
26+
- '3.3'
27+
- '3.4'
28+
os:
29+
- ubuntu-20.04
30+
- ubuntu-22.04
31+
- ubuntu-24.04
32+
- ubuntu-latest
33+
- windows-2019
34+
- macos-13
35+
36+
env:
37+
RAILS_ENV: test
38+
39+
name: ${{ matrix.os }} - Ruby ${{ matrix.ruby }}
40+
steps:
41+
- name: Install system dependencies
42+
if: ${{ inputs.dependencies != '[]' && !contains(matrix.os, 'macos') && !contains(matrix.os, 'windows') }}
43+
run: |
44+
dependencies=$(echo '${{ inputs.dependencies }}' | jq -r '.[]')
45+
for dep in $dependencies; do
46+
sudo apt-get -y --no-install-recommends install "$dep"
47+
done
48+
shell: bash
49+
50+
- name: Install system dependencies (Windows)
51+
if: ${{ contains(matrix.os, 'windows') && inputs.dependencies != '[]' }}
52+
run: |
53+
$dependencies = (echo '${{ inputs.dependencies }}' | jq -r '.[]')
54+
foreach ($dep in $dependencies) {
55+
choco install $dep -y
56+
}
57+
shell: pwsh
58+
59+
- name: Checkout code
60+
uses: actions/checkout@v4
61+
62+
- name: Setup Ruby
63+
uses: ruby/setup-ruby@v1
64+
with:
65+
ruby-version: ${{ matrix.ruby }}
66+
bundler-cache: true
67+
68+
- name: Test
69+
run: ${{ inputs.test_commands }}
70+
71+
- name: Upload coverage report
72+
uses: actions/upload-artifact@v4
73+
with:
74+
name: coverage-${{ matrix.os }}-${{ matrix.ruby }}
75+
path: |
76+
coverage/
77+
retention-days: 1
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
name: Shared Gem Verify Rails/PostgreSQL
2+
on:
3+
workflow_call:
4+
inputs:
5+
test_commands:
6+
description: 'Test commands'
7+
required: false
8+
default: "bundle exec rspec"
9+
type: string
10+
dependencies:
11+
description: 'Array of system dependencies to install'
12+
required: false
13+
default: "[]"
14+
type: string
15+
16+
jobs:
17+
test:
18+
runs-on: ${{ matrix.os }}
19+
timeout-minutes: 40
20+
21+
strategy:
22+
fail-fast: true
23+
matrix:
24+
ruby:
25+
- '3.2'
26+
- '3.3'
27+
- '3.4'
28+
rails:
29+
- '~> 7.0.0'
30+
- '~> 7.1.0'
31+
os:
32+
- ubuntu-latest
33+
34+
env:
35+
RAILS_ENV: test
36+
37+
name: ${{ matrix.os }} - Ruby ${{ matrix.ruby }} - Rails ${{ matrix.rails }}
38+
steps:
39+
- name: Install system dependencies
40+
run: |
41+
dependencies=$(echo '${{ inputs.dependencies }}' | jq -r '.[]')
42+
for dep in $dependencies; do
43+
sudo apt-get -y --no-install-recommends install "$dep"
44+
done
45+
shell: bash
46+
47+
- name: Set up PostgreSQL service
48+
run: |
49+
docker run --name postgres -d -p 5432:5432 \
50+
-e POSTGRES_USER=postgres \
51+
-e POSTGRES_PASSWORD=postgres \
52+
--health-cmd="pg_isready" \
53+
--health-interval="10s" \
54+
--health-timeout="5s" \
55+
--health-retries=5 \
56+
postgres:9.6
57+
58+
- name: Wait for PostgreSQL to be healthy
59+
run: |
60+
docker exec postgres sh -c 'until pg_isready -U postgres; do echo waiting for postgres; sleep 2; done; echo postgres is ready'
61+
62+
- name: Checkout code
63+
uses: actions/checkout@v4
64+
65+
- name: Setup Ruby
66+
uses: ruby/setup-ruby@v1
67+
with:
68+
ruby-version: ${{ matrix.ruby }}
69+
bundler-cache: true
70+
71+
- name: Sanitize rails version for artifact name
72+
run: |
73+
SANITIZED_RAILS=$(echo "${{ matrix.rails }}" | sed 's/~> //g')
74+
echo "RAILS_SANITIZED=${SANITIZED_RAILS}" >> $GITHUB_ENV
75+
shell: bash
76+
77+
- name: Update Rails version
78+
run: |
79+
ruby -pi.bak -e "gsub(/gem ['\"]rails['\"],\s*['\"].+['\"]?/, \"gem 'rails', '${{ matrix.rails }}'\")" Gemfile
80+
bundle update
81+
bundle install
82+
shell: bash
83+
84+
- name: Test
85+
run: ${{ inputs.test_commands }}
86+
87+
- name: Upload coverage report
88+
uses: actions/upload-artifact@v4
89+
with:
90+
name: coverage-${{ matrix.os }}-${{ matrix.ruby }}-${{ env.RAILS_SANITIZED }}
91+
path: |
92+
coverage/
93+
retention-days: 1

0 commit comments

Comments
 (0)