-
Notifications
You must be signed in to change notification settings - Fork 5
168 lines (156 loc) · 5.48 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
name: TruffleRuby Dev Builds
on:
workflow_dispatch:
push:
tags:
- '*'
schedule:
- cron: '0 8 * * *'
jobs:
prepare:
name: Check if the latest truffleruby commit is already built
runs-on: ubuntu-latest
outputs:
should_build: ${{ steps.check_commit.outputs.result }}
commit: ${{ steps.latest_commit.outputs.commit }}
steps:
- name: Clone truffleruby
uses: actions/checkout@v4
with:
repository: oracle/truffleruby
path: truffleruby
- name: Set latest_commit
id: latest_commit
working-directory: truffleruby
run: echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Check if latest commit already built
uses: actions/github-script@v7
id: check_commit
with:
script: |
const latestDevCommit = "${{ steps.latest_commit.outputs.commit }}"
const { owner, repo } = context.repo
let { data: release } = await github.rest.repos.getLatestRelease({ owner, repo })
const latestReleaseCommit = release.body.split('@')[1]
console.log(`Latest release commit: ${latestReleaseCommit}`)
console.log(`Latest truffleruby commit: ${latestDevCommit}`)
if (latestReleaseCommit === latestDevCommit) {
return 'false'
} else {
return 'true'
}
result-encoding: string
release:
name: Create GitHub Release
needs: [prepare]
if: needs.prepare.outputs.should_build == 'true'
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.tag.outputs.tag }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
if: github.event_name != 'push'
- name: Set tag name
id: tag
run: |
if [[ "${{ github.event_name }}" != "push" ]]; then
tag=v$(date +%Y%m%d.%H%M%S)
else
tag=$(basename "${{ github.ref }}")
fi
echo "tag=$tag" >> $GITHUB_OUTPUT
- name: Create Release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: |
tag="${{ steps.tag.outputs.tag }}"
body="oracle/truffleruby@${{ needs.prepare.outputs.commit }}"
gh release create --draft "$tag" --title "$tag" --notes "$body"
build:
needs: [prepare, release]
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm, ubuntu-24.04-arm, macos-13, macos-14 ]
name: [ '-head', '+graalvm-head' ]
runs-on: ${{ matrix.os }}
steps:
- name: Clone truffleruby
uses: actions/checkout@v4
with:
repository: oracle/truffleruby
ref: ${{ needs.prepare.outputs.commit }}
- name: Set platform
id: platform
run: |
platform=${{ matrix.os }}
platform=${platform/macos-13/macos-latest}
platform=${platform/macos-14/macos-13-arm64}
platform=${platform/%-arm/-arm64}
echo "platform=$platform" >> $GITHUB_OUTPUT
# Build
- name: Setup system ruby
uses: ruby/setup-ruby@master
with:
ruby-version: 3.2
- name: Setup system python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- run: echo "SDKROOT=$(xcrun --show-sdk-path)" >> $GITHUB_ENV
if: startsWith(matrix.os, 'macos')
- run: sudo apt-get install -y --no-install-recommends libyaml-dev
if: startsWith(matrix.os, 'ubuntu')
- name: Setup jt
run: echo "$PWD/bin" >> $GITHUB_PATH
- name: Clone Graal
run: jt sforceimports
- name: Install JVMCI
run: |
jt install jvmci
echo "JAVA_HOME=$(jt install jvmci)" >> $GITHUB_ENV
- name: Install mx
run: jt mx --version
- run: free -m
if: startsWith(matrix.os, 'ubuntu')
- name: Build TruffleRuby (native)
run: jt build --env native --extra-image-builder-argument=rubyvm:-J-XX:MaxRAMPercentage=100
if: matrix.name == '-head'
- name: Build TruffleRuby (jvm)
run: jt build --env jvm-ce-libgraal
if: matrix.name == '+graalvm-head'
- run: mkdir -p ~/.rubies
- run: mv $(jt mx --env native standalone-home --type=native ruby) ~/.rubies/truffleruby${{ matrix.name }}
if: matrix.name == '-head'
- run: mv $(jt mx --env jvm-ce-libgraal standalone-home --type=jvm ruby) ~/.rubies/truffleruby${{ matrix.name }}
if: matrix.name == '+graalvm-head'
- name: Create archive
run: tar czf truffleruby${{ matrix.name }}-${{ steps.platform.outputs.platform }}.tar.gz -C ~/.rubies truffleruby${{ matrix.name }}
- name: Basic test
run: ~/.rubies/truffleruby${{ matrix.name }}/bin/ruby --version
- name: OpenSSL test
run: ~/.rubies/truffleruby${{ matrix.name }}/bin/ruby -ropen-uri -e 'puts URI.send(:open, %{https://rubygems.org/}) { |f| f.read(1024) }'
- name: Upload Built Ruby
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: gh release upload "${{ needs.release.outputs.tag }}" "truffleruby${{ matrix.name }}-${{ steps.platform.outputs.platform }}.tar.gz"
publish:
name: Publish Release
needs: [release, build]
runs-on: ubuntu-latest
steps:
- name: Publish Release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: gh release edit "${{ needs.release.outputs.tag }}" --draft=false
- uses: eregon/keep-last-n-releases@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
n: 7
remove_tags_without_release: true