Skip to content

Commit cef48d9

Browse files
authored
Merge pull request #321 from Shopify/ec-easy-compile-setup
Setup "EasyCompile" to allow packaging gem with precompiled binaries
2 parents fca6864 + 60128be commit cef48d9

2 files changed

Lines changed: 91 additions & 1 deletion

File tree

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: "Release gems with precompiled binaries"
2+
on:
3+
workflow_dispatch:
4+
inputs:
5+
release:
6+
description: "If the whole build passes on all platforms, release the gems on RubyGems.org"
7+
required: false
8+
type: boolean
9+
default: false
10+
jobs:
11+
compile:
12+
timeout-minutes: 20
13+
name: "Cross compile the gem on different ruby versions"
14+
strategy:
15+
matrix:
16+
os: ["macos-latest", "shopify-ubuntu-20.04"]
17+
runs-on: "${{ matrix.os }}"
18+
steps:
19+
- name: "Checkout code"
20+
uses: "actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd"
21+
- name: "Setup Ruby"
22+
uses: "ruby/setup-ruby@8aeb6ff8030dd539317f8e1769a044873b56ea71"
23+
with:
24+
ruby-version: "3.2.9"
25+
bundler-cache: true
26+
- name: "Run easy compile"
27+
uses: "shopify-playground/edouard-playground/.github/actions/easy_compile@main"
28+
with:
29+
step: "compile"
30+
test:
31+
timeout-minutes: 20
32+
name: "Run the test suite"
33+
needs: compile
34+
strategy:
35+
matrix:
36+
os: ["macos-latest", "shopify-ubuntu-20.04"]
37+
rubies: ["3.2", "3.3", "3.4"]
38+
type: ["cross", "native"]
39+
runs-on: "${{ matrix.os }}"
40+
steps:
41+
- name: "Checkout code"
42+
uses: "actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd"
43+
- name: "Setup Ruby"
44+
uses: "ruby/setup-ruby@8aeb6ff8030dd539317f8e1769a044873b56ea71"
45+
with:
46+
ruby-version: "${{ matrix.rubies }}"
47+
bundler-cache: true
48+
- name: "Run easy compile"
49+
uses: "shopify-playground/edouard-playground/.github/actions/easy_compile@main"
50+
with:
51+
step: "test_${{ matrix.type }}"
52+
install:
53+
timeout-minutes: 5
54+
name: "Verify the gem can be installed"
55+
needs: test
56+
strategy:
57+
matrix:
58+
os: ["macos-latest", "shopify-ubuntu-20.04"]
59+
runs-on: "${{ matrix.os }}"
60+
steps:
61+
- name: "Setup Ruby"
62+
uses: "ruby/setup-ruby@8aeb6ff8030dd539317f8e1769a044873b56ea71"
63+
- name: "Run easy compile"
64+
uses: "shopify-playground/edouard-playground/.github/actions/easy_compile@main"
65+
with:
66+
step: "install"
67+
release:
68+
permissions:
69+
id-token: write
70+
contents: read
71+
timeout-minutes: 5
72+
if: ${{ inputs.release }}
73+
name: "Release all gems with RubyGems"
74+
needs: install
75+
runs-on: "shopify-ubuntu-latest"
76+
steps:
77+
- name: "Setup Ruby"
78+
uses: "ruby/setup-ruby@8aeb6ff8030dd539317f8e1769a044873b56ea71"
79+
- name: "Run easy compile"
80+
uses: "shopify-playground/edouard-playground/.github/actions/easy_compile@main"
81+
with:
82+
step: "release"

lib/saturn.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,15 @@
44
require "uri"
55

66
require "saturn/version"
7-
require "saturn/saturn"
7+
begin
8+
# Load the precompiled version of the library
9+
ruby_version = /(\d+\.\d+)/.match(RUBY_VERSION)
10+
require "saturn/#{ruby_version}/saturn"
11+
rescue LoadError
12+
# It's important to leave for users that can not or don't want to use the gem with precompiled binaries.
13+
require "saturn/saturn"
14+
end
15+
816
require "saturn/location"
917
require "saturn/comment"
1018
require "saturn/graph"

0 commit comments

Comments
 (0)