Skip to content

Nightly Builds

Nightly Builds #1107

Workflow file for this run

name: Nightly Builds
on:
workflow_dispatch:
schedule:
# Daily at 3:14
- cron: '14 3 * * *'
jobs:
debian-packages:
strategy:
matrix:
os: [ubuntu-20.04, ubuntu-22.04]
runs-on: ${{ matrix.os }}
steps:
- name: Git Clone
uses: actions/[email protected]
with:
submodules: true
- 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
cp debian-temp/sciteco-curses_*.deb sciteco-curses_nightly_${{matrix.os}}_amd64.deb
cp debian-temp/sciteco-gtk_*.deb sciteco-gtk_nightly_${{matrix.os}}_amd64.deb
cp debian-temp/sciteco-common_*.deb sciteco-common_nightly_${{matrix.os}}_all.deb
- name: Build AppImages
# Should always be on the oldest supported Ubuntu
if: matrix.os == 'ubuntu-20.04'
run: |
cd AppImage
wget -O pkg2appimage.AppImage \
"https://github.com/AppImageCommunity/pkg2appimage/releases/download/continuous/pkg2appimage--x86_64.AppImage"
chmod +x pkg2appimage.AppImage
./pkg2appimage.AppImage curses.yml
mv out/*.AppImage ../sciteco-curses_nightly_x86_64.AppImage
./pkg2appimage.AppImage gtk.yml
mv out/*.AppImage ../sciteco-gtk_nightly_x86_64.AppImage
chmod a+x *.AppImage
- name: Archive Debian/Ubuntu Packages and AppImages
uses: pyTooling/Actions/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: nightly
files: ./*.deb ./*.AppImage
macos:
runs-on: macos-12
steps:
- name: Git Clone
uses: actions/[email protected]
with:
submodules: true
# NOTE: macOS already ships with ncurses and groff.
# The system libncurses has turned out to be buggy, though (keypad() does not work).
# However, it does work on real Mac OS systems, I was told.
# Linking in our own ncurses should also be more portable in case
# the system libncurses ABI breaks.
# However, Homebrew installs ncurses as a keg and it will refer to a
# non-standard $TERMINFO. This could be worked around.
# The macOS Groff version appears to be outdated.
- name: Install Build Dependencies
run: brew install autoconf automake libtool glib groff dylibbundler
# Required by pyTooling/Actions/releaser
- name: Set up Python
uses: actions/[email protected]
with:
python-version: '3.10'
# FIXME: It would be nice to build universal arm64/x86_64 binaries,
# this apparently requires two separate build runs and a following merge
# using `lipo -create`. In this case we could just as well build two
# separate packages.
- name: Configure Build
env:
# Make sure we don't pick up GCC by accident.
CC: clang
CXX: clang++
# FIXME: Once there is an --enable-lto, we should use that.
CFLAGS: -O3 -flto
CXXFLAGS: -O3 -flto
LDFLAGS: -flto
# Uncomment if you want to build against the Homebrew-installed libncurses.
#PKG_CONFIG_PATH: /usr/local/opt/ncurses/lib/pkgconfig
# NOTE: This will not result in a fully statically-linked binary,
# but the more we get rid off, the better.
run: |
autoreconf -i
./configure --with-interface=ncurses --enable-static-executables --enable-html-manual
- name: make
run: make -j 2
# 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: Package
run: |
make install-strip DESTDIR=`pwd`/temp-install
# There are libraries we cannot link against statically.
# We ship them in /usr/local/lib/sciteco so as not to cause collisions with system
# libraries or libraries installed via Homebrew.
# System libraries are considered to have stable ABIs and
# are not currently bundled.
# FIXME: Is this really true for libc++?
dylibbundler -b -x temp-install/usr/local/bin/sciteco \
-cd -d temp-install/usr/local/lib/sciteco -p @executable_path/../lib/sciteco
# FIXME: Should we encode the Git commit into the package version?
# Unfortunately, I cannot find detailed information on how Mac OS
# interpretes these version strings.
VERSION=`sed -nE 's/#define PACKAGE_VERSION "(.*)"/\1/p' config.h`
pkgbuild --identifier net.sf.sciteco.pkg --version $VERSION \
--root temp-install --install-location / \
sciteco-curses_nightly_macos_x86_64.pkg
- name: Archive Mac OS Distribution (ncurses)
uses: pyTooling/Actions/releaser/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: nightly
files: ./*.pkg
# The website is published on Mac OS only because we cannot tweak the
# ./configure flags on Ubuntu where Debian packages are built.
# FIXME: This could be done without a gh-pages branch, see
# https://github.com/actions/starter-workflows/blob/main/pages/static.yml
# This however should be in its own workflow and we'd have to rebuild
# SciTECO and everything.
# FIXME: Also build cheat-sheet.pdf automatically?
- run: make install
- name: Install lowdown (Markdown processor)
run: brew install lowdown
- name: Generate website
run: cd www && sciteco -m build.tes
- name: Publish Website
run: |
cd www
touch .nojekyll
git init
cp ../.git/config ./.git/config
git add .nojekyll *.html
git config --local user.email "Website@GitHubActions"
git config --local user.name "GitHub Actions"
git commit -a -m "update ${{ github.sha }}"
git push -u origin +HEAD:gh-pages
win32-curses:
runs-on: windows-2019
defaults:
run:
shell: bash.exe --login -eo pipefail "{0}"
env:
MSYSTEM: MINGW32
CHERE_INVOKING: 1
steps:
- name: Git Clone
uses: actions/[email protected]
with:
submodules: true
- 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-autotools mingw-w64-i686-toolchain
mingw-w64-i686-glib2 mingw-w64-i686-pdcurses
groff
- name: Configure Build
env:
PDCURSES_CFLAGS: -I/mingw32/include/pdcurses/
# FIXME: glib on MinGW supports static linking but the gspawn
# helper binaries are still linked dynamically, forcing us to ship
# all DLLs anyway. Therefore it makes little sense to link SciTECO
# itself statically - it only wastes a few MB.
# You will also have to add --enable-static-executables.
# The additional Windows libraries are for PDCursesMod/WinGUI:
# LIBGLIB_LIBS: -lglib-2.0 -lintl -liconv -lpcre -lole32 -lws2_32 -luuid
# FIXME: Once there is an --enable-lto, we should use that.
# CFLAGS: -O3 -flto -DGLIB_STATIC_COMPILATION
CFLAGS: -O3 -flto
CXXFLAGS: -O3 -flto
LDFLAGS: -flto
run: |
autoreconf -i
mkdir build-wingui build-wincon
(cd build-wingui
../configure --with-interface=pdcurses-gui --enable-html-manual --program-prefix=g \
--with-scitecodatadir=. \
PDCURSES_LIBS="-lpdcurses_wingui -lgdi32 -lcomdlg32 -lwinmm")
(cd build-wincon
../configure --with-interface=pdcurses --enable-html-manual \
--with-scitecodatadir=. \
PDCURSES_LIBS="-lpdcurses_wincon -lgdi32 -lwinmm")
- name: make
run: |
make -C build-wingui -j 2
make -C build-wincon -j 2
- name: make install
run: |
make -C build-wingui install-strip
make -C build-wincon 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 -C build-wingui check TESTSUITEFLAGS="--verbose"
make -C build-wincon check TESTSUITEFLAGS="--verbose"
- name: Prepare Distribution Directory
env:
MINGW_BUNDLEDLLS_SEARCH_PATH: /mingw32/bin
run: |
mkdir temp-bin/
cd temp-bin/
cp -r /mingw32/bin/{gsciteco.exe,sciteco.exe,grosciteco.tes,tedoc.tes} ./
# datadir is relative to bindir
cp -r /mingw32/bin/{lib,*.tmac} ./
cp /mingw32/bin/sample.teco_ini .teco_ini
cp -r /mingw32/share/doc/sciteco/* ./
cp ../COPYING ../ChangeLog ./
cp /mingw32/bin/gspawn-win32-helper*.exe ./
# Collect DLLs for all included binaries
for f in *.exe; do ../contrib/mingw-bundledlls --copy $f; done
zip -9 -r ../sciteco-pdcurses_nightly_win32.zip .
- name: Archive Windows Distribution (PDCurses)
uses: pyTooling/Actions/releaser/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: nightly
files: ./*.zip
# NOTE: There is a lot of redundancy with win32-curses.
# However the Curses version may be linked 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.
win32-gtk:
runs-on: windows-2019
defaults:
run:
shell: bash.exe --login -eo pipefail "{0}"
env:
MSYSTEM: MINGW32
CHERE_INVOKING: 1
steps:
- name: Git Clone
uses: actions/[email protected]
with:
submodules: true
- 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-autotools mingw-w64-i686-toolchain
mingw-w64-i686-glib2 mingw-w64-i686-gtk3 mingw-w64-i686-librsvg
groff
- name: Configure Build
env:
# FIXME: Once there is an --enable-lto, we should use that.
CFLAGS: -O3 -flto
CXXFLAGS: -O3 -flto
LDFLAGS: -flto
run: |
autoreconf -i
./configure --with-interface=gtk --enable-html-manual \
--with-scitecodatadir=.
- 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
env:
MINGW_BUNDLEDLLS_SEARCH_PATH: /mingw32/bin
run: |
mkdir temp-bin
cd temp-bin
cp /mingw32/bin/{sciteco.exe,grosciteco.tes,tedoc.tes} ./
# datadir is relative to bindir
cp -r /mingw32/bin/{lib,*.tmac} ./
# FIXME: Maybe there should be a separate win32/.teco_ini with
# a few pre-enabled settings?
cp /mingw32/bin/sample.teco_ini .teco_ini
cp /mingw32/bin/fallback.css .teco_css
cp -r /mingw32/share/doc/sciteco/* ./
cp ../COPYING ../ChangeLog ./
cp /mingw32/bin/gspawn-win32-helper*.exe ./
# Collect DLLs for all included binaries
for f in *.exe; do ../contrib/mingw-bundledlls --copy $f; done
#mkdir share
#cp /mingw32/share/loader.cache share/
#glib-compile-schemas /mingw32/share/glib-2.0/schemas
#mkdir -p share/glib-2.0
#cp /mingw32/share/glib-2.0/gschemas.compiled share/glib-2.0/
mkdir -p 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} share/icons/Adwaita/
cp -r /mingw32/share/icons/Adwaita/* share/icons/Adwaita/
gtk-update-icon-cache-3.0 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.
cp /mingw32/lib/gdk-pixbuf-2.0/2.10.0/loaders/{pixbufloader_svg.dll,libpixbufloader-png.dll} .
# Collect DLLs for all pixbuf loaders into the root directory
for f in *pixbufloader*.dll; do ../contrib/mingw-bundledlls --copy $f; done
mkdir -p lib/gdk-pixbuf-2.0/2.10.0/loaders/
mv *pixbufloader*.dll lib/gdk-pixbuf-2.0/2.10.0/loaders/
cp ../win32/loaders.cache lib/gdk-pixbuf-2.0/2.10.0/
zip -9 -r ../sciteco-gtk3_nightly_win32.zip .
- name: Archive Windows Distribution (GTK+ 3)
uses: pyTooling/Actions/releaser/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: nightly
files: ./*.zip