[ci] Try to workaround apparent homebrew bug
[survex.git] / .github / workflows / main.yml
blob7f516911478074b70dfda1953a73fcb23a7e810b
1 name: CI
3 # Controls when the workflow will run
4 on:
5   # Triggers the workflow on push, or for pull requests against master
6   push:
7     paths-ignore:
8       - NEWS
9   pull_request:
10     branches: [ master ]
11     paths-ignore:
12       - NEWS
14   # Allows you to run this workflow manually from the Actions tab
15   workflow_dispatch:
17 jobs:
18   linux:
19     runs-on: 'ubuntu-20.04'
20     steps:
21     - name: Check out repository code
22       uses: actions/checkout@v4
23       with:
24         show-progress: false
25     - name: Install CCache
26       uses: hendrikmuhs/ccache-action@v1
27       with:
28         key: ${{ github.job }}
29     - name: Install package dependencies
30       run: |
31         sudo apt-get update
32         sudo apt-get install \
33             gettext \
34             libwxgtk3.0-gtk3-dev \
35             libavcodec-dev \
36             libavformat-dev \
37             libproj-dev \
38             libswscale-dev \
39             mesa-common-dev \
40             libglu1-mesa-dev \
41             libx11-dev \
42             libxext-dev \
43             ghostscript \
44             netpbm \
45             x11proto-core-dev \
46             liblocale-po-perl \
47             unifont \
48             docbook \
49             docbook-utils \
50             w3m
51     - name: bootstrap source tree
52       run: |
53         autoreconf -fiv
54         git checkout INSTALL
55     - name: configure
56       run: ./configure CC='ccache gcc' CXX='ccache g++'
57     - name: make
58       run: make -j2
59     - name: Run tests
60       run: make check VERBOSE=1
61     - name: Check generated files are in .gitignore
62       # grep '^' passes through all input while giving a non-zero exit status
63       # if that input is empty.
64       run: |
65         printf '%s\n' .ccache > ".git/info/exclude"
66         git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true
68   valgrind:
69     runs-on: 'ubuntu-20.04'
70     steps:
71     - name: Check out repository code
72       uses: actions/checkout@v4
73       with:
74         show-progress: false
75     - name: Install CCache
76       uses: hendrikmuhs/ccache-action@v1
77       with:
78         key: ${{ github.job }}
79     - name: Install package dependencies
80       run: |
81         sudo apt-get update
82         sudo apt-get install \
83             gettext \
84             libwxgtk3.0-gtk3-dev \
85             libavcodec-dev \
86             libavformat-dev \
87             libproj-dev \
88             libswscale-dev \
89             mesa-common-dev \
90             libglu1-mesa-dev \
91             libx11-dev \
92             libxext-dev \
93             ghostscript \
94             netpbm \
95             x11proto-core-dev \
96             liblocale-po-perl \
97             unifont \
98             docbook \
99             docbook-utils \
100             w3m
101         sudo apt-get install valgrind
102     - name: bootstrap source tree
103       run: |
104         autoreconf -fiv
105         git checkout INSTALL
106     - name: configure
107       run: ./configure CC='ccache gcc' CXX='ccache g++'
108     - name: make
109       run: make -j2
110     - name: Run tests
111       run: VALGRIND=valgrind make check VERBOSE=1
112     - name: Check generated files are in .gitignore
113       # grep '^' passes through all input while giving a non-zero exit status
114       # if that input is empty.
115       run: |
116         printf '%s\n' .ccache > ".git/info/exclude"
117         git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true
119   linux-latest:
120     runs-on: 'ubuntu-latest'
121     steps:
122     - name: Check out repository code
123       uses: actions/checkout@v4
124       with:
125         show-progress: false
126     - name: Install CCache
127       uses: hendrikmuhs/ccache-action@v1
128       with:
129         key: ${{ github.job }}
130     - name: Install package dependencies
131       run: |
132         more /etc/apt/sources.list /etc/apt/sources.list.d/*|cat
133         sudo apt-get update
134         sudo apt-get purge mysql-client mysql-server
135         sudo apt-get dist-upgrade
136         sudo apt-get install update-manager libio-pty-perl
137         # `do-release-upgrade` fails (trying to run `screen` it seems) if stdin
138         # isn't a tty so fake one for it using the Perl IO::Pty module.
139         perl -ne '/use blib|clone_winsize_from/ or print' /usr/share/doc/libio-pty-perl/examples/try > $HOME/try
140         # Run in home directory so logs, etc don't end up in source tree.
141         cd "$HOME" && perl ./try sudo do-release-upgrade -d --mode=server
142         sudo apt-get install \
143             gettext \
144             libwxgtk3.0-gtk3-dev \
145             libavcodec-dev \
146             libavformat-dev \
147             libproj-dev \
148             libswscale-dev \
149             mesa-common-dev \
150             libglu1-mesa-dev \
151             libx11-dev \
152             libxext-dev \
153             ghostscript \
154             netpbm \
155             x11proto-core-dev \
156             liblocale-po-perl \
157             unifont \
158             docbook \
159             docbook-utils \
160             w3m
161     - name: bootstrap source tree
162       run: |
163         autoreconf -fiv
164         git checkout INSTALL
165     - name: configure
166       run: ./configure CC='ccache gcc' CXX='ccache g++'
167     - name: make
168       run: make -j2
169     - name: Run tests
170       run: make check VERBOSE=1
171     - name: Check generated files are in .gitignore
172       # grep '^' passes through all input while giving a non-zero exit status
173       # if that input is empty.
174       run: |
175         printf '%s\n' .ccache > ".git/info/exclude"
176         git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true
178   macos:
179     runs-on: 'macos-latest'
180     steps:
181     - name: Check out repository code
182       uses: actions/checkout@v4
183       with:
184         show-progress: false
185     - name: Install CCache
186       uses: hendrikmuhs/ccache-action@v1
187       with:
188         key: ${{ github.job }}
189     - name: Install package dependencies
190       run: |
191         # Workaround apparent homebrew bug 2024-03-05
192         rm -f /usr/local/bin/2to3-3.* /usr/local/bin/idle3.* /usr/local/bin/pydoc3.* /usr/local/bin/python3.* /usr/local/bin/python3.*-config
193         rm -f /usr/local/bin/2to3 /usr/local/bin/idle3 /usr/local/bin/pydoc3 /usr/local/bin/python3 /usr/local/bin/python3-config
194         brew update
195         brew install \
196             automake \
197             ffmpeg \
198             gettext \
199             gnu-tar \
200             netpbm \
201             proj \
202             wxwidgets
203         brew link --force gettext
204         cpan -T -i local::lib < /dev/null
205         cpan -I -T -i Locale::PO < /dev/null
206     - name: bootstrap source tree
207       run: |
208         autoreconf -fiv
209         git checkout INSTALL
210         V=`sed -e 's/^AC_INIT[^,]*, *\[\([^]]*\)\].*/\1/p;d' configure.ac` ; curl https://survex.com/software/$V/survex-$V.tar.gz | gtar --strip-components=1 --skip-old-files --wildcards -zxf - '*/lib' '*/doc'; ls -lrt lib ; touch lib/unifont.pixelfont lib/preload_font.h; echo ; ls -lrt doc; touch doc/*.1 doc/manual.txt doc/manual.pdf doc/manual/stampfile
211     - name: configure
212       run: ./configure CC='ccache gcc' CXX='ccache g++'
213     - name: make
214       run: |
215         eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
216         make -j3
217     - name: Run tests
218       run: make check VERBOSE=1
219     - name: Check generated files are in .gitignore
220       # grep '^' passes through all input while giving a non-zero exit status
221       # if that input is empty.
222       run: |
223         printf '%s\n' .ccache > ".git/info/exclude"
224         git status --porcelain|grep '^' && { echo "The generated files listed above are not in .gitignore" ; exit 1; }; true