mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
CICD: Update the AppImage Build to Use ubuntu 16.04.
Update the linux AppImage build to use ubuntu 16.04, and simplify it to a single workflow running on a vanilla docker image. This still uses the upload-artifact@v3 Action that will be EOL in November 2024, because v4 relies on node 20 which has an unmet glibc dependency in ubuntu 16.04. But this workflow can be updated to run on ubuntu 18.04 by a simple search / replace and disabling some 16.04 specific PPAs. @dirkh, @probonopd: I have moved this here from #4183 to be able to review and discuss it without the noise of the workflow cleanup. The workflow now also publishes the AppImage as an artifact on pull request builds, available under Checks / Details / Summary. Signed-off-by: Michael Keller <github@ike.ch>
This commit is contained in:
parent
331d6712c6
commit
306dad575c
7 changed files with 162 additions and 230 deletions
77
.github/workflows/linux-trusty-5.12.yml
vendored
77
.github/workflows/linux-trusty-5.12.yml
vendored
|
|
@ -1,77 +0,0 @@
|
|||
name: Ubuntu 14.04 / Qt 5.12 for AppImage--
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- scripts/docker/**
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- scripts/docker/**
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
buildAppImage:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: docker://subsurface/trusty-qt512:1.1
|
||||
|
||||
steps:
|
||||
- name: checkout sources
|
||||
uses: actions/checkout@v1
|
||||
|
||||
- name: atomically create or retrieve the build number and assemble release notes
|
||||
id: version_number
|
||||
if: github.event_name == 'push'
|
||||
run: |
|
||||
bash ./scripts/get-atomic-buildnr.sh ${{ github.sha }} ${{ secrets.NIGHTLY_BUILDS }} "CICD-release"
|
||||
version=$(cat release-version)
|
||||
echo "version=$version" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: store dummy version and build number for pull request
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
echo "100" > latest-subsurface-buildnumber
|
||||
echo "CICD-pull-request" > latest-subsurface-buildnumber-extension
|
||||
|
||||
- name: run build
|
||||
env:
|
||||
SUBSURFACE_REPO_PATH: ${{ github.workspace }}
|
||||
run: |
|
||||
cd ..
|
||||
git config --global --add safe.directory ${SUBSURFACE_REPO_PATH}
|
||||
git config --global --add safe.directory ${SUBSURFACE_REPO_PATH}/libdivecomputer
|
||||
rm -rf /install-root/include/libdivecomputer
|
||||
bash -x subsurface/.github/workflows/scripts/linux-in-container-build.sh
|
||||
|
||||
- name: prepare PR artifacts
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
mkdir -p Linux-artifacts
|
||||
mv Subsurface.AppImage Linux-artifacts
|
||||
|
||||
- name: PR artifacts
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Linux-artifacts
|
||||
path: Linux-artifacts
|
||||
|
||||
- name: prepare release artifacts
|
||||
if: github.event_name == 'push'
|
||||
run: |
|
||||
mv Subsurface.AppImage Subsurface-v${{ steps.version_number.outputs.version }}.AppImage
|
||||
|
||||
# only publish a 'release' on push events (those include merging a PR)
|
||||
- name: upload binaries
|
||||
if: github.event_name == 'push'
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: v${{ steps.version_number.outputs.version }}
|
||||
repository: ${{ github.repository_owner }}/nightly-builds
|
||||
token: ${{ secrets.NIGHTLY_BUILDS }}
|
||||
prerelease: false
|
||||
fail_on_unmatched_files: true
|
||||
files: |
|
||||
./Subsurface*.AppImage
|
||||
161
.github/workflows/linux-ubuntu-16.04-5.12-appimage.yml
vendored
Normal file
161
.github/workflows/linux-ubuntu-16.04-5.12-appimage.yml
vendored
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
name: Ubuntu 16.04 / Qt 5.15-- for AppImage
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- scripts/docker/**
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- scripts/docker/**
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ubuntu:16.04
|
||||
|
||||
steps:
|
||||
- name: checkout sources
|
||||
uses: actions/checkout@v1
|
||||
|
||||
- name: get container ready for build
|
||||
run: |
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "update distro and install dependencies"
|
||||
|
||||
apt-get update
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -q \
|
||||
software-properties-common \
|
||||
apt-transport-https \
|
||||
curl
|
||||
|
||||
curl https://apt.kitware.com/keys/kitware-archive-latest.asc | apt-key add -
|
||||
|
||||
add-apt-repository -y ppa:savoury1/qt-5-15
|
||||
add-apt-repository -y ppa:savoury1/kde-5-80
|
||||
add-apt-repository -y ppa:savoury1/gpg
|
||||
add-apt-repository -y ppa:savoury1/ffmpeg4
|
||||
add-apt-repository -y ppa:savoury1/vlc3
|
||||
add-apt-repository -y ppa:savoury1/gcc-9
|
||||
add-apt-repository -y ppa:savoury1/display
|
||||
add-apt-repository -y ppa:savoury1/apt-xenial
|
||||
add-apt-repository -y ppa:savoury1/gtk-xenial
|
||||
add-apt-repository -y ppa:savoury1/qt-xenial
|
||||
add-apt-repository -y ppa:savoury1/kde-xenial
|
||||
add-apt-repository -y ppa:mayeut-github/devtoolset-10
|
||||
add-apt-repository -y 'deb https://apt.kitware.com/ubuntu/ xenial main'
|
||||
apt-get update
|
||||
apt-get dist-upgrade -y
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -q \
|
||||
autoconf automake cmake g++ g++-9 git libcrypto++-dev libcurl4-gnutls-dev \
|
||||
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
||||
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
||||
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
||||
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
||||
qml-module-qtquick2 qt5-qmake qtchooser qtconnectivity5-dev \
|
||||
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
||||
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
||||
qtquickcontrols2-5-dev xvfb libbluetooth-dev libmtp-dev
|
||||
|
||||
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 \
|
||||
--slave /usr/bin/g++ g++ /usr/bin/g++-9
|
||||
|
||||
- name: atomically create or retrieve the build number and assemble release notes
|
||||
id: version_number
|
||||
if: github.event_name == 'push'
|
||||
run: |
|
||||
bash ./scripts/get-atomic-buildnr.sh ${{ github.sha }} ${{ secrets.NIGHTLY_BUILDS }} "CICD-release"
|
||||
version=$(cat release-version)
|
||||
echo "version=$version" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: store dummy version and build number for pull request
|
||||
id: pull_request_version_number
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
echo "100" > latest-subsurface-buildnumber
|
||||
echo "CICD-pull-request" > latest-subsurface-buildnumber-extension
|
||||
version=$(scripts/get-version)
|
||||
echo "version=$version" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: build Subsurface
|
||||
run: |
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "building desktop"
|
||||
|
||||
# now build the appimage
|
||||
cd ..
|
||||
bash -e -x subsurface/scripts/build.sh -desktop -create-appdir -build-with-webkit
|
||||
|
||||
- name: test desktop build
|
||||
run: |
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "running tests for desktop"
|
||||
cd build/tests
|
||||
# xvfb-run --auto-servernum ./TestGitStorage -v2
|
||||
xvfb-run --auto-servernum make check
|
||||
|
||||
- name: build appimage
|
||||
run: |
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "assembling AppImage"
|
||||
|
||||
export QT_PLUGIN_PATH=$QT_ROOT/plugins
|
||||
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
||||
export QT_DEBUG_PLUGINS=1
|
||||
|
||||
cd ..
|
||||
|
||||
# set up the appdir
|
||||
mkdir -p appdir/usr/plugins/
|
||||
|
||||
# mv googlemaps plugins into place
|
||||
mv appdir/usr/usr/lib/x86_64-linux-gnu/qt5/plugins/* appdir/usr/plugins # the usr/usr is not a typo, that's where it ends up
|
||||
rm -rf appdir/usr/home/ appdir/usr/include/ appdir/usr/share/man/ # No need to ship developer and man files as part of the AppImage
|
||||
rm -rf appdir/usr/usr appdir/usr/lib/x86_64-linux-gnu/cmake appdir/usr/lib/pkgconfig
|
||||
cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 appdir/usr/lib/
|
||||
cp /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 appdir/usr/lib/
|
||||
|
||||
# get the linuxdeployqt tool and run it to collect the libraries
|
||||
curl -L -O "https://github.com/probonopd/linuxdeployqt/releases/download/7/linuxdeployqt-7-x86_64.AppImage"
|
||||
chmod a+x linuxdeployqt*.AppImage
|
||||
unset QTDIR
|
||||
unset QT_PLUGIN_PATH
|
||||
unset LD_LIBRARY_PATH
|
||||
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -bundle-non-qt-libs -qmldir=./subsurface/stats -qmldir=./subsurface/map-widget/ -verbose=2
|
||||
|
||||
# create the AppImage
|
||||
export VERSION=$(cd subsurface/scripts ; ./get-version) # linuxdeployqt uses this for naming the file
|
||||
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -appimage -qmldir=./subsurface/stats -qmldir=./subsurface/map-widget/ -verbose=2
|
||||
|
||||
# copy AppImage to the calling VM
|
||||
# with GitHub Actions the /${GITHUB_WORKSPACE} directory is the current working directory at the start of a step
|
||||
cp Subsurface*.AppImage* /${GITHUB_WORKSPACE}/Subsurface.AppImage
|
||||
|
||||
- name: PR artifacts
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Subsurface-Linux-AppImage-${{ steps.pull_request_version_number.outputs.version }}
|
||||
path: Subsurface.AppImage
|
||||
compression-level: 0
|
||||
|
||||
- name: prepare release artifacts
|
||||
if: github.event_name == 'push'
|
||||
run: |
|
||||
mv Subsurface.AppImage Subsurface-v${{ steps.version_number.outputs.version }}.AppImage
|
||||
|
||||
# only publish a 'release' on push events (those include merging a PR)
|
||||
- name: upload binaries
|
||||
if: github.event_name == 'push'
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: v${{ steps.version_number.outputs.version }}
|
||||
repository: ${{ github.repository_owner }}/nightly-builds
|
||||
token: ${{ secrets.NIGHTLY_BUILDS }}
|
||||
prerelease: false
|
||||
fail_on_unmatched_files: true
|
||||
files: |
|
||||
./Subsurface*.AppImage
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
set -e
|
||||
|
||||
# this gets executed by the GitHub Action when building an AppImage for Linux
|
||||
# inside of the trusty-qt512 container
|
||||
|
||||
export PATH=$QT_ROOT/bin:$PATH # Make sure correct qmake is found on the $PATH for linuxdeployqt
|
||||
export CMAKE_PREFIX_PATH=$QT_ROOT/lib/cmake
|
||||
|
||||
# echo "--------------------------------------------------------------"
|
||||
# echo "install missing packages"
|
||||
# apt install -y libbluetooth-dev libmtp-dev
|
||||
|
||||
# the container currently has things under / that need to be under /__w/subsurface/subsurface instead
|
||||
cp -a /appdir /__w/subsurface/
|
||||
cp -a /install-root /__w/subsurface/
|
||||
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "building desktop"
|
||||
|
||||
# now build our AppImage
|
||||
bash -e -x subsurface/scripts/build.sh -desktop -create-appdir -build-with-webkit -quick
|
||||
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "assembling AppImage"
|
||||
|
||||
export QT_PLUGIN_PATH=$QT_ROOT/plugins
|
||||
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
||||
export QT_DEBUG_PLUGINS=1
|
||||
|
||||
# set up the appdir
|
||||
mkdir -p appdir/usr/plugins/
|
||||
|
||||
# mv googlemaps plugins into place
|
||||
mv appdir/usr/usr/local/Qt/5.*/gcc_64/plugins/* appdir/usr/plugins # the usr/usr is not a typo, that's where it ends up
|
||||
rm -rf appdir/usr/home/ appdir/usr/include/ appdir/usr/share/man/ # No need to ship developer and man files as part of the AppImage
|
||||
rm -rf appdir/usr/usr appdir/usr/lib/cmake appdir/usr/lib/pkgconfig
|
||||
cp /ssllibs/libssl.so appdir/usr/lib/libssl.so.1.1
|
||||
cp /ssllibs/libcrypto.so appdir/usr/lib/libcrypto.so.1.1
|
||||
|
||||
# get the linuxdeployqt tool and run it to collect the libraries
|
||||
curl -L -O "https://github.com/probonopd/linuxdeployqt/releases/download/7/linuxdeployqt-7-x86_64.AppImage"
|
||||
chmod a+x linuxdeployqt*.AppImage
|
||||
unset QTDIR
|
||||
unset QT_PLUGIN_PATH
|
||||
unset LD_LIBRARY_PATH
|
||||
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -bundle-non-qt-libs -qmldir=./subsurface/stats -qmldir=./subsurface/map-widget/ -verbose=2
|
||||
|
||||
# create the AppImage
|
||||
export VERSION=$(cd subsurface/scripts ; ./get-version) # linuxdeployqt uses this for naming the file
|
||||
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -appimage -qmldir=./subsurface/stats -qmldir=./subsurface/map-widget/ -verbose=2
|
||||
|
||||
# copy AppImage to the calling VM
|
||||
# with GitHub Actions the /${GITHUB_WORKSPACE} directory is the current working directory at the start of a step
|
||||
cp Subsurface*.AppImage* /${GITHUB_WORKSPACE}/Subsurface.AppImage
|
||||
ls -l /${GITHUB_WORKSPACE}/Subsurface.AppImage
|
||||
Loading…
Add table
Add a link
Reference in a new issue