Skip to content

Commit cfdb7f7

Browse files
ci: cache Octave packages and retry forge installs to survive GitHub release throttling
1 parent 8fdb2b6 commit cfdb7f7

1 file changed

Lines changed: 42 additions & 2 deletions

File tree

.github/workflows/ci.yml

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,51 @@ jobs:
1212
- name: Checkout
1313
uses: actions/checkout@v4
1414

15-
- name: Install Octave, Xvfb and packages
15+
- name: Install Octave, Xvfb
1616
run: |
1717
sudo apt-get update
1818
sudo apt-get install -y octave octave-dev build-essential xvfb
19-
octave --no-gui --eval "pkg install -forge datatypes; pkg install -forge statistics"
19+
20+
- name: Octave package prefix
21+
id: octave-prefix
22+
run: |
23+
dir="$(octave --no-gui -q --eval "printf('%s', pkg('prefix'))")"
24+
mkdir -p "$dir"
25+
echo "dir=$dir" >> "$GITHUB_OUTPUT"
26+
echo "api=$(basename "$(dirname "$dir")")" >> "$GITHUB_OUTPUT"
27+
28+
- name: Cache Octave packages
29+
uses: actions/cache@v4
30+
with:
31+
path: ${{ steps.octave-prefix.outputs.dir }}
32+
key: octave-pkgs-${{ runner.os }}-${{ steps.octave-prefix.outputs.api }}
33+
34+
- name: Install Octave packages
35+
run: |
36+
install_pkg () {
37+
name="$1"
38+
if octave --no-gui -q --eval "pkg load $name" >/dev/null 2>&1; then
39+
echo "$name: already installed"
40+
return 0
41+
fi
42+
attempt=0
43+
while [ $attempt -lt 3 ]; do
44+
attempt=$((attempt+1))
45+
echo "$name: install attempt $attempt/3"
46+
if octave --no-gui -q --eval "pkg install -forge $name"; then
47+
return 0
48+
fi
49+
[ $attempt -lt 3 ] && sleep 15
50+
done
51+
return 1
52+
}
53+
if ! octave --no-gui -q --eval "pkg load datatypes statistics" >/dev/null 2>&1; then
54+
octave --no-gui -q --eval "pkg rebuild"
55+
if ! octave --no-gui -q --eval "pkg load datatypes statistics" >/dev/null 2>&1; then
56+
install_pkg datatypes
57+
install_pkg statistics
58+
fi
59+
fi
2060
2161
- name: Run plotly tests
2262
working-directory: ${{ github.workspace }}/plotly/testing

0 commit comments

Comments
 (0)