Skip to content

Commit a225bfe

Browse files
Build rake tasks on CI dynamically
1 parent ba33ad3 commit a225bfe

File tree

5 files changed

+59
-121
lines changed

5 files changed

+59
-121
lines changed

.github/workflows/build.yml

Lines changed: 13 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -82,121 +82,24 @@ jobs:
8282
rm -rf /tmp/.buildx-cache
8383
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
8484
85+
build-rake-task-matrix:
86+
runs-on: ubuntu-20.04
87+
outputs:
88+
entries: ${{ steps.set-matrix.outputs.entries }}
89+
steps:
90+
- uses: actions/checkout@v3
91+
- name: Set matrix
92+
id: set-matrix
93+
run: |
94+
echo "entries=$(rake ci:rake_task_matrix)" >> $GITHUB_OUTPUT
95+
8596
rake-tasks:
8697
strategy:
8798
fail-fast: false
8899
matrix:
89-
entry:
90-
- task: "build:head-wasm32-unknown-emscripten-full"
91-
artifact: "rubies/ruby-head-wasm32-unknown-emscripten-full.tar.gz"
92-
artifact_name: "ruby-head-wasm32-unknown-emscripten-full"
93-
builder: "wasm32-unknown-emscripten"
94-
- task: "build:head-wasm32-unknown-emscripten-minimal"
95-
artifact: "rubies/ruby-head-wasm32-unknown-emscripten-minimal.tar.gz"
96-
artifact_name: "ruby-head-wasm32-unknown-emscripten-minimal"
97-
builder: "wasm32-unknown-emscripten"
98-
- task: "build:head-wasm32-unknown-wasi-full"
99-
artifact: "rubies/ruby-head-wasm32-unknown-wasi-full.tar.gz"
100-
artifact_name: "ruby-head-wasm32-unknown-wasi-full"
101-
builder: "wasm32-unknown-wasi"
102-
- task: "build:head-wasm32-unknown-wasi-full-debug"
103-
artifact: "rubies/ruby-head-wasm32-unknown-wasi-full-debug.tar.gz"
104-
artifact_name: "ruby-head-wasm32-unknown-wasi-full-debug"
105-
builder: "wasm32-unknown-wasi"
106-
- task: "build:head-wasm32-unknown-wasi-full-js"
107-
artifact: "rubies/ruby-head-wasm32-unknown-wasi-full-js.tar.gz"
108-
artifact_name: "ruby-head-wasm32-unknown-wasi-full-js"
109-
builder: "wasm32-unknown-wasi"
110-
- task: "build:head-wasm32-unknown-wasi-full-js-debug"
111-
artifact: "rubies/ruby-head-wasm32-unknown-wasi-full-js-debug.tar.gz"
112-
artifact_name: "ruby-head-wasm32-unknown-wasi-full-js-debug"
113-
builder: "wasm32-unknown-wasi"
114-
- task: "build:head-wasm32-unknown-wasi-minimal"
115-
artifact: "rubies/ruby-head-wasm32-unknown-wasi-minimal.tar.gz"
116-
artifact_name: "ruby-head-wasm32-unknown-wasi-minimal"
117-
builder: "wasm32-unknown-wasi"
118-
- task: "build:head-wasm32-unknown-wasi-minimal-debug"
119-
artifact: "rubies/ruby-head-wasm32-unknown-wasi-minimal-debug.tar.gz"
120-
artifact_name: "ruby-head-wasm32-unknown-wasi-minimal-debug"
121-
builder: "wasm32-unknown-wasi"
122-
- task: "build:head-wasm32-unknown-wasi-minimal-js"
123-
artifact: "rubies/ruby-head-wasm32-unknown-wasi-minimal-js.tar.gz"
124-
artifact_name: "ruby-head-wasm32-unknown-wasi-minimal-js"
125-
builder: "wasm32-unknown-wasi"
126-
- task: "build:head-wasm32-unknown-wasi-minimal-js-debug"
127-
artifact: "rubies/ruby-head-wasm32-unknown-wasi-minimal-js-debug.tar.gz"
128-
artifact_name: "ruby-head-wasm32-unknown-wasi-minimal-js-debug"
129-
builder: "wasm32-unknown-wasi"
130-
131-
- task: "build:3_2-wasm32-unknown-emscripten-full"
132-
artifact: "rubies/ruby-3_2-wasm32-unknown-emscripten-full.tar.gz"
133-
artifact_name: "ruby-3_2-wasm32-unknown-emscripten-full"
134-
builder: "wasm32-unknown-emscripten"
135-
- task: "build:3_2-wasm32-unknown-emscripten-minimal"
136-
artifact: "rubies/ruby-3_2-wasm32-unknown-emscripten-minimal.tar.gz"
137-
artifact_name: "ruby-3_2-wasm32-unknown-emscripten-minimal"
138-
builder: "wasm32-unknown-emscripten"
139-
- task: "build:3_2-wasm32-unknown-wasi-full"
140-
artifact: "rubies/ruby-3_2-wasm32-unknown-wasi-full.tar.gz"
141-
artifact_name: "ruby-3_2-wasm32-unknown-wasi-full"
142-
builder: "wasm32-unknown-wasi"
143-
- task: "build:3_2-wasm32-unknown-wasi-full-debug"
144-
artifact: "rubies/ruby-3_2-wasm32-unknown-wasi-full-debug.tar.gz"
145-
artifact_name: "ruby-3_2-wasm32-unknown-wasi-full-debug"
146-
builder: "wasm32-unknown-wasi"
147-
- task: "build:3_2-wasm32-unknown-wasi-full-js"
148-
artifact: "rubies/ruby-3_2-wasm32-unknown-wasi-full-js.tar.gz"
149-
artifact_name: "ruby-3_2-wasm32-unknown-wasi-full-js"
150-
builder: "wasm32-unknown-wasi"
151-
- task: "build:3_2-wasm32-unknown-wasi-full-js-debug"
152-
artifact: "rubies/ruby-3_2-wasm32-unknown-wasi-full-js-debug.tar.gz"
153-
artifact_name: "ruby-3_2-wasm32-unknown-wasi-full-js-debug"
154-
builder: "wasm32-unknown-wasi"
155-
- task: "build:3_2-wasm32-unknown-wasi-minimal"
156-
artifact: "rubies/ruby-3_2-wasm32-unknown-wasi-minimal.tar.gz"
157-
artifact_name: "ruby-3_2-wasm32-unknown-wasi-minimal"
158-
builder: "wasm32-unknown-wasi"
159-
- task: "build:3_2-wasm32-unknown-wasi-minimal-debug"
160-
artifact: "rubies/ruby-3_2-wasm32-unknown-wasi-minimal-debug.tar.gz"
161-
artifact_name: "ruby-3_2-wasm32-unknown-wasi-minimal-debug"
162-
builder: "wasm32-unknown-wasi"
163-
- task: "build:3_2-wasm32-unknown-wasi-minimal-js"
164-
artifact: "rubies/ruby-3_2-wasm32-unknown-wasi-minimal-js.tar.gz"
165-
artifact_name: "ruby-3_2-wasm32-unknown-wasi-minimal-js"
166-
builder: "wasm32-unknown-wasi"
167-
- task: "build:3_2-wasm32-unknown-wasi-minimal-js-debug"
168-
artifact: "rubies/ruby-3_2-wasm32-unknown-wasi-minimal-js-debug.tar.gz"
169-
artifact_name: "ruby-3_2-wasm32-unknown-wasi-minimal-js-debug"
170-
builder: "wasm32-unknown-wasi"
171-
172-
- task: "npm:ruby-head-wasm-emscripten"
173-
prerelease: "npm:configure_prerelease"
174-
artifact: "packages/npm-packages/ruby-head-wasm-emscripten/ruby-head-wasm-emscripten-*.tgz"
175-
artifact_name: "npm-ruby-head-wasm-emscripten"
176-
builder: "wasm32-unknown-emscripten"
177-
- task: "npm:ruby-head-wasm-wasi"
178-
test: "npm:ruby-head-wasm-wasi-check"
179-
prerelease: "npm:configure_prerelease"
180-
artifact: "packages/npm-packages/ruby-head-wasm-wasi/ruby-head-wasm-wasi-*.tgz"
181-
artifact_name: "npm-ruby-head-wasm-wasi"
182-
builder: "wasm32-unknown-wasi"
183-
- task: "npm:ruby-3_2-wasm-wasi"
184-
test: "npm:ruby-3_2-wasm-wasi-check"
185-
prerelease: "npm:configure_prerelease"
186-
artifact: "packages/npm-packages/ruby-3_2-wasm-wasi/ruby-3_2-wasm-wasi-*.tgz"
187-
artifact_name: "npm-ruby-3_2-wasm-wasi"
188-
builder: "wasm32-unknown-wasi"
189-
190-
- task: "wapm:ruby-build"
191-
artifact: "packages/wapm-packages/ruby/dist"
192-
artifact_name: "wapm-ruby"
193-
builder: "wasm32-unknown-wasi"
194-
- task: "wapm:irb-build"
195-
artifact: "packages/wapm-packages/irb/dist"
196-
artifact_name: "wapm-irb"
197-
builder: "wasm32-unknown-wasi"
100+
entry: ${{ fromJson(needs.build-rake-task-matrix.outputs.entries) }}
198101

199-
needs: [build-builder-image]
102+
needs: [build-builder-image, build-rake-task-matrix]
200103
runs-on: ubuntu-20.04
201104
steps:
202105
- uses: actions/checkout@v3

Rakefile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,17 @@ BUILDS =
7777
end
7878
end
7979

80+
NPM_PACKAGES = [
81+
{ name: "ruby-head-wasm-emscripten", build: "head-wasm32-unknown-emscripten-full", target: "wasm32-unknown-emscripten" },
82+
{ name: "ruby-head-wasm-wasi", build: "head-wasm32-unknown-wasi-full-js-debug", target: "wasm32-unknown-wasi" },
83+
{ name: "ruby-3_2-wasm-wasi", build: "3_2-wasm32-unknown-wasi-full-js-debug", target: "wasm32-unknown-wasi" },
84+
]
85+
86+
WAPM_PACKAGES = [
87+
{ name: "ruby", build: "head-wasm32-unknown-wasi-full" },
88+
{ name: "irb", build: "head-wasm32-unknown-wasi-full" },
89+
]
90+
8091
LIB_ROOT = File.dirname(__FILE__)
8192

8293
TOOLCHAINS = {}

lib/ruby_wasm/rake_task.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ class RubyWasm::BuildTask < ::Rake::TaskLib
88
# Source to build from.
99
attr_reader :source
1010

11+
# Target to build for.
12+
attr_reader :target
13+
1114
# Toolchain for the build.
1215
# Defaults to the Toolchain.get for the target.
1316
attr_reader :toolchain

tasks/ci.rake

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
namespace :ci do
2+
task :rake_task_matrix do
3+
require "pathname"
4+
entries = BUILD_TASKS.map do |build|
5+
{
6+
task: "build:#{build.name}",
7+
artifact: Pathname.new(build.crossruby.artifact).relative_path_from(LIB_ROOT).to_s,
8+
artifact_name: File.basename(build.crossruby.artifact, ".tar.gz"),
9+
builder: build.target,
10+
}
11+
end
12+
entries += NPM_PACKAGES.map do |pkg|
13+
{
14+
task: "npm:#{pkg[:name]}",
15+
test: "npm:#{pkg[:name]}-check",
16+
prerelease: "npm:configure_prerelease",
17+
artifact: "packages/npm-packages/#{pkg[:name]}/#{pkg[:name]}-*.tgz",
18+
artifact_name: "npm-#{pkg[:name]}",
19+
builder: pkg[:target],
20+
}
21+
end
22+
entries += WAPM_PACKAGES.map do |pkg|
23+
{
24+
task: "wapm:#{pkg[:name]}-build",
25+
artifact: "packages/wapm-packages/#{pkg[:name]}/dist",
26+
artifact_name: "wapm-#{pkg[:name]}",
27+
builder: "wasm32-unknown-wasi",
28+
}
29+
end
30+
print JSON.generate(entries)
31+
end
32+
end

tasks/packaging.rake

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,3 @@
1-
NPM_PACKAGES = [
2-
{ name: "ruby-head-wasm-emscripten", build: "head-wasm32-unknown-emscripten-full" },
3-
{ name: "ruby-head-wasm-wasi", build: "head-wasm32-unknown-wasi-full-js-debug" },
4-
{ name: "ruby-3_2-wasm-wasi", build: "3_2-wasm32-unknown-wasi-full-js-debug" },
5-
]
6-
7-
WAPM_PACKAGES = [
8-
{ name: "ruby", build: "head-wasm32-unknown-wasi-full" },
9-
{ name: "irb", build: "head-wasm32-unknown-wasi-full" },
10-
]
11-
121
namespace :npm do
132
wasi_vfs = RubyWasm::WasiVfsProduct.new("build")
143
wasi_sdk = TOOLCHAINS["wasi-sdk"]

0 commit comments

Comments
 (0)