Skip to content

Commit 37a4909

Browse files
committed
Build static linux binaries
1 parent 3b5824b commit 37a4909

File tree

4 files changed

+79
-18
lines changed

4 files changed

+79
-18
lines changed

.github/workflows/ci.yml

+67-18
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,57 @@ concurrency:
1212
cancel-in-progress: true
1313

1414
jobs:
15-
test:
15+
# Build statically linked Linux binaries in an Alpine-based Docker container
16+
# See https://ocamlpro.com/blog/2021_09_02_generating_static_and_portable_executables_with_ocaml
17+
# for more info.
18+
# The container already comes with all required tools pre-installed
19+
# (see https://github.com/rescript-lang/docker-rescript-ci-build/blob/main/Dockerfile).
20+
build-linux:
21+
strategy:
22+
fail-fast: false
23+
matrix:
24+
os: [ubuntu-latest, buildjet-2vcpu-ubuntu-2204-arm]
25+
# syntax explanation:
26+
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#example-including-additional-values-into-combinations
27+
include:
28+
- os: ubuntu-latest
29+
artifact-folder: linux
30+
- os: buildjet-2vcpu-ubuntu-2204-arm
31+
artifact-folder: linuxarm64
32+
33+
runs-on: ${{matrix.os}}
34+
35+
steps:
36+
- name: Checkout
37+
uses: actions/checkout@v4
38+
39+
- name: Build
40+
uses: docker://ghcr.io/rescript-lang/rescript-ci-build:alpine-3.19-ocaml-5.1.1-01
41+
with:
42+
args: opam exec -- make
43+
44+
# Also avoids artifacts upload permission loss:
45+
# https://github.com/actions/upload-artifact/tree/ee69f02b3dfdecd58bb31b4d133da38ba6fe3700#permission-loss
46+
- name: Compress files
47+
run: |
48+
mkdir ${{matrix.artifact-folder}}
49+
mv rescript-editor-analysis.exe ${{matrix.artifact-folder}}
50+
mv rescript-tools.exe ${{matrix.artifact-folder}}
51+
tar -cvf binary.tar ${{matrix.artifact-folder}}
52+
53+
- name: "Upload artifacts"
54+
uses: actions/upload-artifact@v4
55+
with:
56+
name: ${{matrix.artifact-folder}}
57+
path: binary.tar
58+
59+
build:
1660
strategy:
1761
fail-fast: false
1862
matrix:
19-
# Stay on the oldest Ubuntu version that's still supported by Github Actions
20-
# to avoid glibc incompatibilities as far as possible.
2163
os: [
2264
macos-13, # x64
2365
macos-14, # ARM
24-
ubuntu-20.04,
2566
windows-latest,
2667
]
2768
# syntax explanation:
@@ -31,8 +72,6 @@ jobs:
3172
artifact-folder: darwin
3273
- os: macos-14
3374
artifact-folder: darwinarm64
34-
- os: ubuntu-20.04
35-
artifact-folder: linux
3675
- os: windows-latest
3776
artifact-folder: win32
3877

@@ -106,12 +145,14 @@ jobs:
106145
107146
- uses: actions/upload-artifact@v4
108147
with:
109-
name: ${{matrix.os}}
148+
name: ${{matrix.artifact-folder}}
110149
path: binary.tar
111150

112151
package:
113-
needs: test
114-
runs-on: ubuntu-20.04
152+
needs:
153+
- build
154+
- build-linux
155+
runs-on: ubuntu-latest
115156

116157
steps:
117158
- uses: actions/checkout@v4
@@ -125,34 +166,42 @@ jobs:
125166
- run: npm ci
126167
- run: npm run compile
127168

128-
- name: Download MacOS binary
169+
- name: Download MacOS binaries
170+
uses: actions/download-artifact@v4
171+
with:
172+
name: darwin
173+
path: binaries
174+
- run: tar -xvf binary.tar
175+
working-directory: binaries
176+
177+
- name: Download MacOS ARM binaries
129178
uses: actions/download-artifact@v4
130179
with:
131-
name: macos-13
180+
name: darwinarm64
132181
path: binaries
133182
- run: tar -xvf binary.tar
134183
working-directory: binaries
135184

136-
- name: Download MacOS ARM binary
185+
- name: Download Linux binaries
137186
uses: actions/download-artifact@v4
138187
with:
139-
name: macos-14
188+
name: linux
140189
path: binaries
141190
- run: tar -xvf binary.tar
142191
working-directory: binaries
143192

144-
- name: Download Linux binary
193+
- name: Download Linux ARM binaries
145194
uses: actions/download-artifact@v4
146195
with:
147-
name: ubuntu-20.04
196+
name: linuxarm64
148197
path: binaries
149198
- run: tar -xvf binary.tar
150199
working-directory: binaries
151200

152-
- name: Download Windows binary
201+
- name: Download Windows binaries
153202
uses: actions/download-artifact@v4
154203
with:
155-
name: windows-latest
204+
name: win32
156205
path: binaries
157206
- run: tar -xvf binary.tar
158207
working-directory: binaries
@@ -163,7 +212,7 @@ jobs:
163212

164213
- name: Move binaries to folders
165214
run: |
166-
declare -a platforms=("darwin" "darwinarm64" "linux" "win32")
215+
declare -a platforms=("darwin" "darwinarm64" "linux" "linuxarm64" "win32")
167216
168217
for platform in "${platforms[@]}"; do
169218
mkdir server/analysis_binaries/"$platform"

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#### :rocket: New Feature
2626

2727
- Add support for the rewatch build system for incremental compilation. https://github.com/rescript-lang/rescript-vscode/pull/965
28+
- Add support for Linux ARM64
29+
- Statically linked Linux binaries
2830

2931
## 1.50.0
3032

analysis/bin/dune

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
(env
2+
(static
3+
(flags
4+
(:standard -ccopt -static))))
5+
16
(executable
27
(public_name rescript-editor-analysis)
38
(package analysis)

tools/bin/dune

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
(env
2+
(static
3+
(flags
4+
(:standard -ccopt -static))))
5+
16
(executable
27
(public_name rescript-tools)
38
(package tools)

0 commit comments

Comments
 (0)