@@ -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