aboutsummaryrefslogtreecommitdiffhomepage
path: root/.github/workflows/nightly.yml
blob: 85912c51755e09d79e50e7cc6a56ce834f655f5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
name: Nightly Builds

on:
  workflow_dispatch:
  schedule:
    # Daily at 3:14
    - cron: '14 3 * * *'

jobs:
  debian-packages:
    strategy:
      matrix:
        os: [ubuntu-18.04, ubuntu-20.04]

    runs-on: ${{ matrix.os }}

    steps:

    - name: Recursive Git Clone
      uses: actions/checkout@v2
      with:
        submodules: recursive

    - name: Update Repositories
      run: sudo apt-get update
    - name: Install Build Dependencies
      run: >
        sudo apt-get install -y
        devscripts build-essential lintian debhelper dh-exec
        autoconf automake libtool
        libglib2.0-dev libncurses-dev libgtk-3-dev xvfb
        groff-base

    # NOTE: We need to configure the build directory only to generate distribute.mk.
    - name: Configure Build
      run: |
        autoreconf -i
        ./configure

    # NOTE: The debian package build rules already use xvfb-run to emulate an XServer
    # when necessary since the PPA build servers might also be headless.
    # NOTE: Packages are left in debian-temp/.
    - name: Build Debian/Ubuntu Packages
      run: ./distribute.mk debian-binary

    - name: Get current date
      id: date
      run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
    # NOTE: There is no way to prevent Github from zipping the artifact.
    - name: Archive Debian/Ubuntu Packages
      uses: actions/upload-artifact@v2
      with:
        name: SciTECO nightly packages on ${{ steps.date.outputs.date }} (${{ matrix.os }}, ncurses and GTK+ 3)
        path: debian-temp/*.deb

  win32-curses:
    runs-on: windows-latest

    defaults:
      run:
        shell: bash.exe --login -eo pipefail "{0}"
    env:
      MSYSTEM: MINGW32
      CHERE_INVOKING: 1

    steps:

    - name: Recursive Git Clone
      uses: actions/checkout@v2
      with:
        submodules: recursive

    - name: Set Up Shell
      run: echo C:\msys64\usr\bin\ | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
      shell: pwsh

    - name: Install Build Dependencies
      run: >
        pacman -S --noconfirm --needed
        base-devel mingw-w64-i686-toolchain
        mingw-w64-i686-glib2 mingw-w64-i686-pdcurses
        groff

    - name: Configure Build
      env:
        PDCURSES_CFLAGS: -I/mingw32/include/pdcurses/
        # The additional Windows libraries are for PDCursesMod/WinGUI:
        PDCURSES_LIBS: -lpdcurses -lgdi32 -lcomdlg32
        LIBGLIB_LIBS: -lglib-2.0 -lintl -liconv -lpcre -lole32 -lws2_32 -luuid
        # FIXME: Once there is an --enable-lto, we should use that.
        CFLAGS: -g -O3 -flto -DGLIB_STATIC_COMPILATION
        CXXFLAGS: -g -O3 -flto
        LDFLAGS: -flto
      run: |
        autoreconf -i
        ./configure --with-interface=pdcurses-gui --enable-html-manual --enable-static-executables

    - name: make
      run: make -j 2
    - run: make install-strip
    # NOTE: The test suite must be run in verbose mode because if it fails
    # we won't be able to analyze testsuite.log.
#   - name: Run Test Suite
#     run: make check TESTSUITEFLAGS="--verbose"

    - name: Prepare Distribution Directory
      run: |
        mkdir temp-bin/
        cp /mingw32/bin/{sciteco.exe,grosciteco.tes,tedoc.tes} temp-bin/
        cp -r /mingw32/share/sciteco/{lib,*.tmac} temp-bin/
        cp /mingw32/share/sciteco/sample.teco_ini temp-bin/.teco_ini
        cp -r /mingw32/share/doc/sciteco/* temp-bin/
        cp COPYING ChangeLog temp-bin/
        cp /mingw32/bin/gspawn-win32-helper*.exe temp-bin/
        # FIXME: Even though MSYS provides working statically-linked
        # Glib libraries, the g_spawn() helpers still depend on the DLL.
        # This could perhaps be avoided by downloading our own self-built
        # executable from somewhere.
        # Else, there is little sense in linking the Curses builds statically
        # as only libstdc++-6.dll is missing.
        cp /mingw32/bin/{libglib-2.0-0,libpcre-1,libintl-8,libiconv-2,libwinpthread-1,libgcc_s_dw2-1}.dll temp-bin/
    - name: Get Current Date
      id: date
      run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
    - name: Archive Windows Distribution (PDCurses)
      uses: actions/upload-artifact@v2
      with:
        name: SciTECO nightly build on ${{ steps.date.outputs.date }} (Win32, PDCurses)
        path: temp-bin/*

  # NOTE: There is a lot of redundancy with win32-curses.
  # However we link the Curses version statically, while Gtk+3 cannot be
  # linked statically on Windows (at least MSYS does not provide
  # static libraries) and would draw in libglib, libintl, libiconv etc. anyway.
  # On the other hand we currently have to package all sorts of libraries only
  # for gspawn-win32-helper-console.exe - if this situation persists, we can
  # just as well unify the two jobs.
  win32-gtk:
    runs-on: windows-latest

    defaults:
      run:
        shell: bash.exe --login -eo pipefail "{0}"
    env:
      MSYSTEM: MINGW32
      CHERE_INVOKING: 1

    steps:

    - name: Recursive Git Clone
      uses: actions/checkout@v2
      with:
        submodules: recursive

    - name: Set Up Shell
      run: echo C:\msys64\usr\bin\ | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
      shell: pwsh

    - name: Install Build Dependencies
      run: >
        pacman -S --noconfirm --needed
        base-devel mingw-w64-i686-toolchain
        mingw-w64-i686-glib2 mingw-w64-i686-gtk3
        groff

    - name: Configure Build
      env:
        # FIXME: Once there is an --enable-lto, we should use that.
        CFLAGS: -g -O3 -flto
        CXXFLAGS: -g -O3 -flto
        LDFLAGS: -flto
      run: |
        autoreconf -i
        ./configure --with-interface=gtk --enable-html-manual

    - name: make
      run: make -j 2
    - run: make install-strip
    # NOTE: The test suite must be run in verbose mode because if it fails
    # we won't be able to analyze testsuite.log.
#   - name: Run Test Suite
#     run: make check TESTSUITEFLAGS="--verbose"

    - name: Prepare Distribution Directory
      run: |
        mkdir -p temp-bin
        cp /mingw32/bin/{sciteco.exe,grosciteco.tes,tedoc.tes} temp-bin/
        cp -r /mingw32/share/sciteco/{lib,*.tmac} temp-bin/
        # FIXME: Maybe there should be a separate win32/.teco_ini with
        # a few pre-enabled settings?
        cp /mingw32/share/sciteco/sample.teco_ini temp-bin/.teco_ini
        cp /mingw32/share/sciteco/fallback.css temp-bin/.teco_css
        cp -r /mingw32/share/doc/sciteco/* temp-bin/
        cp COPYING ChangeLog temp-bin/
        cp /mingw32/bin/gspawn-win32-helper*.exe temp-bin/
        cp /mingw32/bin/{libglib-2.0-0,libpcre-1,libintl-8,libiconv-2,libwinpthread-1,libgcc_s_dw2-1}.dll temp-bin/
        cp /mingw32/bin/{libgtk-3-0,libgdk-3-0,libgdk_pixbuf-2.0-0,libatk-1.0-0}.dll temp-bin/
        cp /mingw32/bin/{libgobject-2.0-0,libgmodule-2.0-0,libgio-2.0-0,libffi-7}.dll temp-bin/
        cp /mingw32/bin/{libpango-1.0-0,libpangocairo-1.0-0,libpangowin32-1.0-0,libpangoft2-1.0-0}.dll temp-bin/
        cp /mingw32/bin/{libthai-0,libdatrie-1,libharfbuzz-0,libgraphite2,libfribidi-0,libepoxy-0}.dll temp-bin/
        cp /mingw32/bin/{libfontconfig-1,libexpat-1}.dll temp-bin/
        cp /mingw32/bin/{libfreetype-6,libbrotlidec,libbrotlicommon,libbz2-1,zlib1}.dll temp-bin/
        cp /mingw32/bin/{libcairo-2,libcairo-gobject-2,libpixman-1-0,libstdc++-6}.dll temp-bin/
        cp /mingw32/bin/{libpng16-16,librsvg-2-2,libxml2-2}.dll temp-bin/
        #mkdir -p temp-bin/share
        #cp /mingw32/share/loader.cache temp-bin/share/
        #glib-compile-schemas /mingw32/share/glib-2.0/schemas
        #mkdir -p temp-bin/share/glib-2.0
        #cp /mingw32/share/glib-2.0/gschemas.compiled temp-bin/share/glib-2.0/
        mkdir -p temp-bin/share/icons/Adwaita
        # FIXME: It should be sufficient to package the SVG icons,
        # but I cannot get it to work. Perhaps index.theme would have to be tweaked.
        # We could also try to include a pure scalable icon theme.
        #cp -r /mingw32/share/icons/Adwaita/{scalable*,index.theme} temp-bin/share/icons/Adwaita/
        cp -r /mingw32/share/icons/Adwaita/* temp-bin/share/icons/Adwaita/
        gtk-update-icon-cache-3.0 temp-bin/share/icons/Adwaita/
        # FIXME: It's possible to change the location of loaders.cache via $GDK_PIXBUF_MODULE_FILE.
        # If we did that, we could avoid "reusing" the lib/ directory.
        # This is important when somebody changes $SCITECOPATH.
        mkdir -p temp-bin/lib/gdk-pixbuf-2.0/2.10.0/loaders/
        cp /mingw32/lib/gdk-pixbuf-2.0/2.10.0/loaders/{libpixbufloader-svg.dll,libpixbufloader-png.dll} \
           temp-bin/lib/gdk-pixbuf-2.0/2.10.0/loaders/
        cp win32/loaders.cache temp-bin/lib/gdk-pixbuf-2.0/2.10.0/
    - name: Get Current Date
      id: date
      run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
    - name: Archive Windows Distribution (GTK+ 3)
      uses: actions/upload-artifact@v2
      with:
        name: SciTECO nightly build on ${{ steps.date.outputs.date }} (Win32, GTK+ 3)
        path: temp-bin/*