|
1 | 1 | #!/usr/bin/env bash |
2 | 2 | set -euo pipefail |
3 | 3 |
|
4 | | -# Download Positron server to temporary directory |
5 | | -# Note: this is the url for x64 architecture machines |
6 | | -curl -L "https://cdn.posit.co/positron/releases/server/x86_64/positron-server-linux-x64-2026.05.0-179.tar.gz" -o /tmp/positron-server.tar.gz |
| 4 | +GITHUB_API="https://api.github.com/repos/posit-dev/positron/releases/latest" |
| 5 | +CDN_BASE="https://cdn.posit.co/positron/releases" |
| 6 | +DEST="/tmp/positron-server.tar.gz" |
7 | 7 |
|
8 | | -# Create directory |
9 | | -mkdir -p /opt/positron-server |
| 8 | +# Find latest Positron release |
| 9 | +release=$(wget -qO- "$GITHUB_API" | python3 -c "import json,sys; print(json.load(sys.stdin)['tag_name'])") |
| 10 | + |
| 11 | +# Get the checksums for the latest release |
| 12 | +checksum_url="${CDN_BASE}/checksums/positron-${release}-checksums.json" |
| 13 | +checksums=$(wget -qO- "$checksum_url") |
| 14 | + |
| 15 | +filename="positron-server-linux-x64-${release}.tar.gz" |
| 16 | +expected=$(echo "$checksums" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d['${filename}'])") |
| 17 | + |
| 18 | +download_url="${CDN_BASE}/server/x86_64/${filename}" |
10 | 19 |
|
11 | | -# Unpack Positron Server into newly created directory |
12 | | -tar -xzf /tmp/positron-server.tar.gz -C /opt/positron-server --strip-components=1 |
| 20 | +wget -q "$download_url" -O "$DEST" |
13 | 21 |
|
14 | | -rm /tmp/positron-server.tar.gz |
| 22 | +# Verify SHA256 checksum |
| 23 | +actual=$(sha256sum "$DEST" | awk '{print $1}') |
| 24 | + |
| 25 | +if [ "$actual" != "$expected" ]; then |
| 26 | + echo "Checksum MISMATCH: expected $expected, got $actual" >&2 |
| 27 | + rm -f "$DEST" |
| 28 | + exit 1 |
| 29 | +fi |
| 30 | + |
| 31 | +# Install Positron Server |
| 32 | +mkdir -p /opt/positron-server |
| 33 | +tar -xzf "$DEST" -C /opt/positron-server --strip-components=1 |
| 34 | +rm "$DEST" |
0 commit comments