Skip to content

Commit 006aa8d

Browse files
authored
Merge pull request #4264 from quarto-dev/feature/arm64
Add Support for Linux Arm64
2 parents 9db3e3e + 8e167b5 commit 006aa8d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+5651
-1485
lines changed

.github/workflows/create-release.yml

+96-4
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ jobs:
9898
- name: Make Tarball
9999
run: |
100100
pushd package/
101-
mv dist quarto-${{needs.configure.outputs.version}}
101+
mv pkg-working quarto-${{needs.configure.outputs.version}}
102102
tar -cvf quarto-${{needs.configure.outputs.version}}-linux-amd64.tar quarto-${{needs.configure.outputs.version}}
103103
gzip quarto-${{needs.configure.outputs.version}}-linux-amd64.tar
104-
mv quarto-${{needs.configure.outputs.version}} dist
104+
mv quarto-${{needs.configure.outputs.version}} pkg-working
105105
popd
106106
107107
- name: Upload Artifact
@@ -110,6 +110,38 @@ jobs:
110110
name: Deb Zip
111111
path: ./package/quarto-${{needs.configure.outputs.version}}-linux-amd64.tar.gz
112112

113+
make-arm64-tarball:
114+
runs-on: ubuntu-latest
115+
needs: [configure]
116+
117+
steps:
118+
- uses: actions/checkout@v3
119+
120+
- name: Configure
121+
run: |
122+
./configure.sh
123+
124+
- name: Prepare Distribution
125+
run: |
126+
pushd package/src/
127+
./quarto-bld prepare-dist --set-version ${{needs.configure.outputs.version}} --arch aarch64 --log-level info
128+
popd
129+
130+
- name: Make Tarball
131+
run: |
132+
pushd package/
133+
mv pkg-working quarto-${{needs.configure.outputs.version}}
134+
tar -cvf quarto-${{needs.configure.outputs.version}}-linux-arm64.tar quarto-${{needs.configure.outputs.version}}
135+
gzip quarto-${{needs.configure.outputs.version}}-linux-arm64.tar
136+
mv quarto-${{needs.configure.outputs.version}} pkg-working
137+
popd
138+
139+
- name: Upload Artifact
140+
uses: actions/upload-artifact@v3
141+
with:
142+
name: Deb Arm64 Zip
143+
path: ./package/quarto-${{needs.configure.outputs.version}}-linux-arm64.tar.gz
144+
113145
make-tarball-rhel:
114146
runs-on: ubuntu-latest
115147
needs: [configure]
@@ -153,6 +185,34 @@ jobs:
153185
name: RHEL Zip
154186
path: ./package/quarto-${{needs.configure.outputs.version}}-linux-rhel7-amd64.tar.gz
155187

188+
make-installer-arm64-deb:
189+
runs-on: ubuntu-latest
190+
needs: [configure]
191+
192+
steps:
193+
- uses: actions/checkout@v3
194+
195+
- name: Configure
196+
run: |
197+
./configure.sh
198+
199+
- name: Prepare Distribution
200+
run: |
201+
pushd package/src/
202+
./quarto-bld prepare-dist --set-version ${{needs.configure.outputs.version}} --arch aarch64 --log-level info
203+
popd
204+
205+
- name: Make Installer
206+
run: |
207+
pushd package/src/
208+
./quarto-bld make-installer-deb --set-version ${{needs.configure.outputs.version}} --arch aarch64 --log-level info
209+
popd
210+
211+
- name: Upload Artifact
212+
uses: actions/upload-artifact@v3
213+
with:
214+
name: Deb Arm64 Installer
215+
path: ./package/out/quarto-${{needs.configure.outputs.version}}-linux-arm64.deb
156216

157217

158218
make-installer-deb:
@@ -201,7 +261,7 @@ jobs:
201261
quarto check
202262
quarto --paths
203263
quarto --version
204-
264+
205265
make-installer-win:
206266
runs-on: windows-latest
207267
needs: [configure]
@@ -228,7 +288,7 @@ jobs:
228288
- name: Build Launcher
229289
run: |
230290
cargo build --release --all-features --manifest-path package/launcher/Cargo.toml
231-
cp package/launcher/target/release/quarto.exe package/dist/bin/quarto.exe
291+
cp package/launcher/target/release/quarto.exe package/pkg-working/bin/quarto.exe
232292
233293
- name: Make Installer
234294
run: |
@@ -355,9 +415,11 @@ jobs:
355415
[
356416
configure,
357417
make-installer-deb,
418+
make-installer-arm64-deb,
358419
make-installer-win,
359420
make-installer-mac,
360421
make-tarball-rhel,
422+
make-arm64-tarball,
361423
make-tarball,
362424
make-source-tarball,
363425
test-zip-win,
@@ -404,6 +466,17 @@ jobs:
404466
asset_name: quarto-${{needs.configure.outputs.version}}-linux-amd64.tar.gz
405467
asset_content_type: application/gzip
406468

469+
- name: Attach Arm64 Release Tarball
470+
id: attach-arm4-release-tarball
471+
uses: actions/upload-release-asset@v1
472+
env:
473+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
474+
with:
475+
upload_url: ${{ steps.create_release.outputs.upload_url }}
476+
asset_path: ./Deb Arm64 Zip/quarto-${{needs.configure.outputs.version}}-linux-arm64.tar.gz
477+
asset_name: quarto-${{needs.configure.outputs.version}}-linux-arm64.tar.gz
478+
asset_content_type: application/gzip
479+
407480
- name: Attach RHEL Tarball
408481
id: attach-rhel-tarball
409482
uses: actions/upload-release-asset@v1
@@ -426,6 +499,17 @@ jobs:
426499
asset_name: quarto-${{needs.configure.outputs.version}}-linux-amd64.deb
427500
asset_content_type: application/deb
428501

502+
- name: Attach Arm64 Debian Installer
503+
id: attach-arm64-deb-installer
504+
uses: actions/upload-release-asset@v1
505+
env:
506+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
507+
with:
508+
upload_url: ${{ steps.create_release.outputs.upload_url }}
509+
asset_path: ./Deb Arm64 Installer/quarto-${{needs.configure.outputs.version}}-linux-arm64.deb
510+
asset_name: quarto-${{needs.configure.outputs.version}}-linux-arm64.deb
511+
asset_content_type: application/deb
512+
429513
- name: Attach Windows Installer
430514
id: attach-win-installer
431515
uses: actions/upload-release-asset@v1
@@ -507,10 +591,18 @@ jobs:
507591
pushd Deb\ Zip
508592
sha256sum quarto-${{needs.configure.outputs.version}}-linux-amd64.tar.gz >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt
509593
popd
594+
595+
pushd Deb\ Arm64\ Zip
596+
sha256sum quarto-${{needs.configure.outputs.version}}-linux-arm64.tar.gz >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt
597+
popd
510598
511599
pushd Deb\ Installer
512600
sha256sum quarto-${{needs.configure.outputs.version}}-linux-amd64.deb >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt
513601
popd
602+
603+
pushd Deb\ Arm64\ Installer
604+
sha256sum quarto-${{needs.configure.outputs.version}}-linux-arm64.deb >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt
605+
popd
514606
515607
pushd Source
516608
sha256sum quarto-${{needs.configure.outputs.version}}.tar.gz >> ../quarto-${{needs.configure.outputs.version}}-checksums.txt

.github/workflows/performance-check.yml

+6-2
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,23 @@ jobs:
4848
4949
# move the TS file so quarto command will use bundled JS
5050
mv src/quarto.ts src/quarto1.ts
51+
52+
pushd package/pkg-working/bin
5153
5254
# test a bare quarto command
5355
q_start=$(date +%s.%3N)
54-
quarto
56+
./quarto
5557
q_end=$(date +%s.%3N)
5658
q_elapsed=$(printf '%.3f\n' $(echo "scale=3; $q_end - $q_start" | bc))
5759
5860
# test a quarto render
5961
q_render_start=$(date +%s.%3N)
60-
quarto render tests/docs/test.qmd --to html
62+
./quarto render ../../../tests/docs/test.qmd --to html
6163
q_render_end=$(date +%s.%3N)
6264
q_render_elapsed=$(printf '%.3f\n' $(echo "scale=3; $q_render_end - $q_render_start" | bc))
6365
66+
popd
67+
6468
# return the measures
6569
echo "bundle_time=$bundle_elapsed" >> $GITHUB_OUTPUT
6670
echo "q_time=$q_elapsed" >> $GITHUB_OUTPUT

.github/workflows/test-bundle.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,5 @@ jobs:
3737
pushd package/src
3838
./quarto-bld prepare-dist
3939
mv ../../src/quarto.ts ../../src/quarto1.ts
40-
quarto
40+
pushd ../pkg-working/bin
41+
./quarto check

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ src/resources/deno_std/cache
1818
src/vendor-*
1919

2020
# windows configuration file
21-
win_configuration.bat
21+
win_configuration.bat
22+
/package/pkg-working

configuration

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
# Binary dependencies
1111
export DENO=v1.28.2
12-
export DENO_DOM=v0.1.23-alpha-artifacts
12+
export DENO_DOM=v0.1.35-alpha-artifacts
1313
export PANDOC=2.19.2
14-
export DARTSASS=1.32.8
14+
export DARTSASS=1.55.0
1515
export ESBUILD=0.15.6
1616

1717
# Bootstrap dependencies from bslib

configure.sh

+5-2
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,15 @@ if [[ "${QUARTO_VENDOR_BINARIES}" = "true" ]]; then
4343
cd $QUARTO_BIN_PATH/tools
4444

4545
# Download Deno
46-
DENOURL=https://github.com/denoland/deno/releases/download
47-
4846
for DENOFILE in $DENOFILES; do
4947
download "$DENOURL/$DENO/$DENOFILE" "$DENOFILE"
5048
unzip -o $DENOFILE
5149
DENO_ARCH_DIR=$(basename $DENOFILE .zip)
50+
51+
if [[ "${DENO_ARCH_DIR}" = "deno-linux-arm64" ]]; then
52+
DENO_ARCH_DIR="deno-aarch64-unknown-linux-gnu"
53+
fi
54+
5255
mkdir $DENO_ARCH_DIR
5356
mv deno $DENO_ARCH_DIR
5457
rm $DENOFILE

package/scripts/common/quarto

+11-1
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,20 @@ if [ "$QUARTO_DENO" == "" ]; then
135135
echo "quarto script failed: unrecognized architecture " ${FULLARCH}
136136
exit 1
137137
fi
138+
138139
else
139-
DENO_DIR=deno-x86_64-unknown-linux-gnu
140+
NIXARCH=$(uname -m)
141+
if [[ $NIXARCH == "x86_64" ]]; then
142+
DENO_DIR=deno-x86_64-unknown-linux-gnu
143+
elif [[ $NIXARCH == "aarch64" ]]; then
144+
DENO_DIR=deno-aarch64-unknown-linux-gnu
145+
else
146+
echo "configure script failed: unrecognized architecture " ${NIXARCH}
147+
exit 1
148+
fi
140149
fi
141150
export QUARTO_DENO="${SCRIPT_PATH}/tools/${DENO_DIR}/deno"
151+
142152
fi
143153

144154
export DENO_NO_UPDATE_CHECK=1

package/scripts/common/utils.sh

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# DENOFILES is only required at configure.sh, but DENO_DIR is used in many places
22

33
if [[ $OSTYPE == 'darwin'* ]]; then
4+
DENOURL=https://github.com/denoland/deno/releases/download
45
FULLARCH=$(uname -sm)
56
DENOFILES="deno-x86_64-apple-darwin.zip deno-aarch64-apple-darwin.zip"
67

@@ -13,6 +14,18 @@ if [[ $OSTYPE == 'darwin'* ]]; then
1314
exit 1
1415
fi
1516
else
16-
DENOFILES=deno-x86_64-unknown-linux-gnu.zip
17-
DENO_DIR=deno-x86_64-unknown-linux-gnu
17+
18+
NIXARCH=$(uname -m)
19+
if [[ $NIXARCH == "x86_64" ]]; then
20+
DENOURL=https://github.com/denoland/deno/releases/download
21+
DENOFILES=deno-x86_64-unknown-linux-gnu.zip
22+
DENO_DIR=deno-x86_64-unknown-linux-gnu
23+
elif [[ $NIXARCH == "aarch64" ]]; then
24+
DENOURL=https://github.com/LukeChannings/deno-arm64/releases/download
25+
DENOFILES=deno-linux-arm64.zip
26+
DENO_DIR=deno-aarch64-unknown-linux-gnu
27+
else
28+
echo "configure script failed: unrecognized architecture " ${NIXARCH}
29+
exit 1
30+
fi
1831
fi

package/src/cmd/pkg-cmd.ts

+38-20
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@ import { Command } from "cliffy/command/mod.ts";
88
import { join } from "path/mod.ts";
99
import { info } from "log/mod.ts";
1010

11-
import { Configuration, readConfiguration } from "../common/config.ts";
11+
import { printConfiguration } from "../common/config.ts"
12+
13+
import {
14+
Configuration,
15+
kValidArch,
16+
kValidOS,
17+
readConfiguration,
18+
} from "../common/config.ts";
1219

1320
export const kLogLevel = "logLevel";
1421
export const kVersion = "setVersion";
@@ -17,24 +24,35 @@ export function packageCommand(run: (config: Configuration) => Promise<void>) {
1724
return new Command().option(
1825
"-sv, --set-version [version:string]",
1926
"Version to set when preparing this distribution",
27+
).option(
28+
"-o, --os [os:string]",
29+
"Operating system for this command (" + kValidOS.join(", ") + ")",
30+
)
31+
.option(
32+
"-a, --arch [arch:string]",
33+
"Architecture for this command (" + kValidArch.join(", ") + ")",
34+
)
2035
// deno-lint-ignore no-explicit-any
21-
).action(async (args: Record<string, any>) => {
22-
const version = args[kVersion];
23-
24-
// Read the version and configuration
25-
const config = readConfiguration(version);
26-
27-
// Set up the bin and share environment for any downstream code
28-
Deno.env.set("QUARTO_BIN_PATH", config.directoryInfo.bin);
29-
Deno.env.set(
30-
"QUARTO_SHARE_PATH",
31-
join(config.directoryInfo.src, "resources"),
32-
);
33-
Deno.env.set("QUARTO_DEBUG", "true");
34-
35-
// Run the command
36-
info("Using configuration:");
37-
info(config);
38-
await run(config);
39-
});
36+
.action(async (args: Record<string, any>) => {
37+
const version = args[kVersion];
38+
const os = args["os"];
39+
const arch = args["arch"];
40+
41+
// Read the version and configuration
42+
const config = readConfiguration(version, os, arch);
43+
44+
// Set up the bin and share environment for any downstream code
45+
Deno.env.set("QUARTO_BIN_PATH", config.directoryInfo.bin);
46+
Deno.env.set(
47+
"QUARTO_SHARE_PATH",
48+
join(config.directoryInfo.src, "resources"),
49+
);
50+
Deno.env.set("QUARTO_DEBUG", "true");
51+
52+
// Print the configuration
53+
printConfiguration(config);
54+
55+
// Run the command
56+
await run(config);
57+
});
4058
}

0 commit comments

Comments
 (0)