diff --git a/.gitignore b/.gitignore index 69e668d4f250ecf7ae2ecb5df2d22cd48f184776..b7b1518cca694e580a1b94c06c405489081465ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ *.pro.user -pkg/build/ +pkg/build_*/ diff --git a/pkg/arch/PKGBUILD b/pkg/archlinux/PKGBUILD similarity index 100% rename from pkg/arch/PKGBUILD rename to pkg/archlinux/PKGBUILD diff --git a/pkg/build.sh b/pkg/build.sh index 730089454382f62deab799579364e46640e03269..1c13a5cde2569a46b566509bcb38617a5abcb46e 100644 --- a/pkg/build.sh +++ b/pkg/build.sh @@ -1,11 +1,14 @@ #!/bin/bash +################################################################################ +# This is a utility script to make distribution package with CI/CD pipelines. +# DO NOT RUN THIS SCRIPT DIRECTLY on your local machine. +################################################################################ + PKGNAME='ocs-url' PROJDIR="$(cd "$(dirname "${0}")/../" && pwd)" -BUILDDIR="${PROJDIR}/pkg/build" - BUILDTYPE='' if [ "${1}" ]; then BUILDTYPE="${1}" @@ -16,121 +19,191 @@ if [ "${2}" ]; then TREEISH="${2}" fi -export_source() { - destdir="${BUILDDIR}" - if [ "${1}" ]; then - destdir="${1}" - fi - $(cd "${PROJDIR}" && git archive --prefix="${PKGNAME}/" --output="${destdir}/${PKGNAME}.tar.gz" "${TREEISH}") +BUILDDIR="${PROJDIR}/pkg/build_${TREEISH}" + +SRCARCHIVE="${BUILDDIR}/${PKGNAME}.tar.gz" + +################################################################################ +# Utility functions +################################################################################ +export_srcarchive() { + filepath="${1}" + $(cd "${PROJDIR}" && git archive --prefix="${PKGNAME}/" --output="${filepath}" "${TREEISH}") } -build_ubuntu() { - #sudo apt install build-essential qt5-default libqt5svg5-dev qtdeclarative5-dev devscripts debhelper fakeroot +transfer_file() { + filepath="${1}" + if [ -f "${filepath}" ]; then + filename="$(basename "${filepath}")" + curl -T "${filepath}" "https://transfer.sh/${filename}" + fi +} - cd "${PROJDIR}" +################################################################################ +# ubuntu +# docker-image: ubuntu:14.04 +################################################################################ +pre_ubuntu() { + sudo apt update -qq + sudo apt -y install build-essential qt5-default libqt5svg5-dev qtdeclarative5-dev devscripts debhelper fakeroot git curl +} +build_ubuntu() { mkdir -p "${BUILDDIR}" - export_source "${BUILDDIR}" - tar -xzvf "${BUILDDIR}/${PKGNAME}.tar.gz" -C "${BUILDDIR}" - cp -r "${PROJDIR}/pkg/ubuntu/debian" "${BUILDDIR}/${PKGNAME}" + export_srcarchive "${SRCARCHIVE}" + tar -xzvf "${SRCARCHIVE}" -C "${BUILDDIR}" + cp -r "${PROJDIR}/pkg/ubuntu/debian" "${BUILDDIR}/${PKGNAME}" cd "${BUILDDIR}/${PKGNAME}" debuild -uc -us -b } -build_fedora() { - #sudo dnf install make automake gcc gcc-c++ libtool qt5-qtbase-devel qt5-qtsvg-devel qt5-qtdeclarative-devel rpm-build +post_ubuntu() { + transfer_file "$(find ${BUILDDIR} -type f -name "${PKGNAME}*.deb")" +} - cd "${PROJDIR}" +################################################################################ +# fedora +# docker-image: fedora:20 +# +# pre-step: +# dnf -y install sudo +# useradd -m -g wheel pkgbuilder && sed -i -e 's/# %wheel/%wheel/g' /etc/sudoers +# chown -R pkgbuilder:pkgbuilder PROJDIR +# su pkgbuilder -c sh PROJDIR/pkg/build.sh fedora +################################################################################ +pre_fedora() { + sudo dnf -y install make automake gcc gcc-c++ libtool qt5-qtbase-devel qt5-qtsvg-devel qt5-qtdeclarative-devel rpm-build git curl +} +build_fedora() { mkdir -p "${BUILDDIR}" + export_srcarchive "${SRCARCHIVE}" + mkdir "${BUILDDIR}/SOURCES" mkdir "${BUILDDIR}/SPECS" - export_source "${BUILDDIR}/SOURCES" - cp "${PROJDIR}/pkg/fedora/ocs-url.spec" "${BUILDDIR}/SPECS" - - rpmbuild --define "_topdir ${BUILDDIR}" -bb "${BUILDDIR}/SPECS/ocs-url.spec" + mv "${SRCARCHIVE}" "${BUILDDIR}/SOURCES" + cp "${PROJDIR}/pkg/fedora/${PKGNAME}.spec" "${BUILDDIR}/SPECS" + rpmbuild --define "_topdir ${BUILDDIR}" -bb "${BUILDDIR}/SPECS/${PKGNAME}.spec" } -build_arch() { - #sudo pacman -S base-devel qt5-base qt5-svg qt5-declarative qt5-quickcontrols +post_fedora() { + transfer_file "$(find ${BUILDDIR} -type f -name "${PKGNAME}*.rpm")" +} - cd "${PROJDIR}" +################################################################################ +# archlinux +# docker-image: finalduty/archlinux:latest +# +# pre-step: +# pacman -Syu --noconfirm +# pacman -S --noconfirm sudo +# useradd -m -g wheel pkgbuilder && sed -i -e 's/# %wheel/%wheel/g' /etc/sudoers +# chown -R pkgbuilder:pkgbuilder PROJDIR +# su pkgbuilder -c sh PROJDIR/pkg/build.sh archlinux +################################################################################ +pre_archlinux() { + sudo pacman -Syu --noconfirm + sudo pacman -S --noconfirm base-devel qt5-base qt5-svg qt5-declarative qt5-quickcontrols git curl +} +build_archlinux() { mkdir -p "${BUILDDIR}" - export_source "${BUILDDIR}" - cp "${PROJDIR}/pkg/arch/PKGBUILD" "${BUILDDIR}" + export_srcarchive "${SRCARCHIVE}" + cp "${PROJDIR}/pkg/archlinux/PKGBUILD" "${BUILDDIR}" cd "${BUILDDIR}" updpkgsums makepkg -s } -build_snap() { - #sudo apt install build-essential qt5-default libqt5svg5-dev qtdeclarative5-dev snapcraft +post_archlinux() { + transfer_file "$(find ${BUILDDIR} -type f -name "${PKGNAME}*.pkg.tar.xz")" +} - cd "${PROJDIR}" +################################################################################ +# snap +# docker-image: ubuntu:16.04 +################################################################################ +pre_snap() { + sudo apt update -qq + sudo apt -y install build-essential qt5-default libqt5svg5-dev qtdeclarative5-dev snapcraft git curl +} +build_snap() { mkdir -p "${BUILDDIR}" - export_source "${BUILDDIR}" - tar -xzvf "${BUILDDIR}/${PKGNAME}.tar.gz" -C "${BUILDDIR}" + export_srcarchive "${SRCARCHIVE}" - cd "${BUILDDIR}/${PKGNAME}/pkg/snap" + tar -xzvf "${SRCARCHIVE}" -C "${BUILDDIR}" + cp "${PROJDIR}/pkg/snap/snapcraft.yaml" "${BUILDDIR}/${PKGNAME}" + cp -r "${PROJDIR}/pkg/snap/setup" "${BUILDDIR}/${PKGNAME}" + cd "${BUILDDIR}/${PKGNAME}" snapcraft } -build_appimage() { - #sudo add-apt-repository ppa:beineri/opt-qt57-xenial - #sudo apt update +post_snap() { + transfer_file "$(find ${BUILDDIR} -type f -name "${PKGNAME}*.snap")" +} - #sudo apt install build-essential fuse zsync desktop-file-utils - #sudo apt install qt57base qt57svg qt57declarative qt57quickcontrols +################################################################################ +# appimage +# docker-image: ubuntu:14.04 +################################################################################ +pre_appimage() { + sudo apt update -qq + sudo apt -y install build-essential qt5-default libqt5svg5-dev qtdeclarative5-dev fuse zsync desktop-file-utils git curl # Replace linuxdeployqt download URL to official download URL when the stable version released - #curl -L -o linuxdeployqt https://dl.dropboxusercontent.com/u/150776/temp/linuxdeployqt-799f704-x86-64.appimage - #sudo install -m 755 -p linuxdeployqt /usr/local/bin/linuxdeployqt - - #sudo modprobe fuse - #source /opt/qt57/bin/qt57-env.sh - + curl -L -o linuxdeployqt https://dl.dropboxusercontent.com/u/150776/temp/linuxdeployqt-799f704-x86-64.appimage + sudo install -m 755 -p linuxdeployqt /usr/local/bin/linuxdeployqt + sudo modprobe fuse cd "${PROJDIR}" - export VERSION="$(git describe --always)" +} + +build_appimage() { mkdir -p "${BUILDDIR}" - export_source "${BUILDDIR}" - tar -xzvf "${BUILDDIR}/${PKGNAME}.tar.gz" -C "${BUILDDIR}" + export_srcarchive "${SRCARCHIVE}" + tar -xzvf "${SRCARCHIVE}" -C "${BUILDDIR}" cd "${BUILDDIR}/${PKGNAME}" - #qmake - /opt/qt57/bin/qmake + qmake TARGET="${PKGNAME}" make - strip ./ocs-url + strip "${PKGNAME}" cd "${BUILDDIR}" mkdir -p "${BUILDDIR}/${PKGNAME}.AppDir/usr/bin" - install -m 755 -p "${BUILDDIR}/${PKGNAME}/ocs-url" "${BUILDDIR}/${PKGNAME}.AppDir/ocs-url" - install -m 644 -p "${BUILDDIR}/${PKGNAME}/desktop/ocs-url.desktop" "${BUILDDIR}/${PKGNAME}.AppDir/ocs-url.desktop" - install -m 644 -p "${BUILDDIR}/${PKGNAME}/desktop/ocs-url.svg" "${BUILDDIR}/${PKGNAME}.AppDir/ocs-url.svg" + install -m 755 -p "${BUILDDIR}/${PKGNAME}/${PKGNAME}" "${BUILDDIR}/${PKGNAME}.AppDir/${PKGNAME}" + install -m 644 -p "${BUILDDIR}/${PKGNAME}/desktop/${PKGNAME}.desktop" "${BUILDDIR}/${PKGNAME}.AppDir/${PKGNAME}.desktop" + install -m 644 -p "${BUILDDIR}/${PKGNAME}/desktop/${PKGNAME}.svg" "${BUILDDIR}/${PKGNAME}.AppDir/${PKGNAME}.svg" install -m 755 -p /usr/bin/update-desktop-database "${BUILDDIR}/${PKGNAME}.AppDir/usr/bin/update-desktop-database" install -m 755 -p /usr/bin/desktop-file-validate "${BUILDDIR}/${PKGNAME}.AppDir/usr/bin/desktop-file-validate" install -m 755 -p /usr/bin/desktop-file-install "${BUILDDIR}/${PKGNAME}.AppDir/usr/bin/desktop-file-install" - linuxdeployqt "${BUILDDIR}/${PKGNAME}.AppDir/ocs-url" -qmldir="${BUILDDIR}/${PKGNAME}/app/qml" -verbose=2 -bundle-non-qt-libs # https://github.com/probonopd/linuxdeployqt/issues/25 - linuxdeployqt "${BUILDDIR}/${PKGNAME}.AppDir/ocs-url" -qmldir="${BUILDDIR}/${PKGNAME}/app/qml" -verbose=2 -bundle-non-qt-libs # twice because of #25 + linuxdeployqt "${BUILDDIR}/${PKGNAME}.AppDir/${PKGNAME}" -qmldir="${BUILDDIR}/${PKGNAME}/app/qml" -verbose=2 -bundle-non-qt-libs # https://github.com/probonopd/linuxdeployqt/issues/25 + linuxdeployqt "${BUILDDIR}/${PKGNAME}.AppDir/${PKGNAME}" -qmldir="${BUILDDIR}/${PKGNAME}/app/qml" -verbose=2 -bundle-non-qt-libs # twice because of #25 rm "${BUILDDIR}/${PKGNAME}.AppDir/AppRun" - install -m 755 -p "${BUILDDIR}/${PKGNAME}/pkg/appimage/appimage-desktopintegration" "${BUILDDIR}/${PKGNAME}.AppDir/AppRun" + install -m 755 -p "${BUILDDIR}/${PKGNAME}/pkg/appimage/appimage-desktopintegration_${PKGNAME}" "${BUILDDIR}/${PKGNAME}.AppDir/AppRun" linuxdeployqt --appimage-extract ./squashfs-root/usr/bin/appimagetool "${BUILDDIR}/${PKGNAME}.AppDir" } +post_appimage() { + transfer_file "$(find ${BUILDDIR} -type f -name "${PKGNAME}*.AppImage")" +} + +################################################################################ +# Make package +################################################################################ if [ "${BUILDTYPE}" = 'ubuntu' ]; then - build_ubuntu + pre_ubuntu && build_ubuntu && post_ubuntu elif [ "${BUILDTYPE}" = 'fedora' ]; then - build_fedora -elif [ "${BUILDTYPE}" = 'arch' ]; then - build_arch + pre_fedora && build_fedora && post_fedora +elif [ "${BUILDTYPE}" = 'archlinux' ]; then + pre_archlinux && build_archlinux && post_archlinux elif [ "${BUILDTYPE}" = 'snap' ]; then - build_snap + pre_snap && build_snap && post_snap elif [ "${BUILDTYPE}" = 'appimage' ]; then - build_appimage + pre_appimage && build_appimage && post_appimage else - echo "sh $(basename "${0}") [ubuntu|fedora|arch|snap|appimage] [tree_ish]" + echo "sh $(basename "${0}") [ubuntu|fedora|archlinux|snap|appimage] [tree_ish]" + exit 1 fi diff --git a/pkg/snap/snapcraft.yaml b/pkg/snap/snapcraft.yaml index 895bf477574c53066e88b3cd59b23fbf59a02194..5fb65a37b785d26d9bded928b54e117a409e853e 100644 --- a/pkg/snap/snapcraft.yaml +++ b/pkg/snap/snapcraft.yaml @@ -1,5 +1,5 @@ name: ocs-url -version: '2.0.3' +version: '0.0.0' summary: OCS-URL description: | An install helper program for items served on OpenCollaborationServices (OCS). @@ -7,12 +7,12 @@ description: | grade: devel confinement: strict -#icon: ../../src/desktop/ocs-url.svg +#icon: desktop/ocs-url.svg parts: ocs-url: plugin: qmake - source: ../../ + source: . qt-version: qt5 options: - PREFIX="/usr"