PhotoFlare / photoflare

Quick, simple but powerful Cross Platform image editor.
https://photoflare.io
GNU General Public License v3.0
399 stars 68 forks source link

Setup Travis CI for build AppImage and deploy it to GitHub #167

Closed ghost closed 5 years ago

ghost commented 5 years ago

Compile this application on Travis CI upon each git push, and upload an AppImage to your GitHub Releases page.

Providing an AppImage would have, among others, these advantages:

Here is an overview of projects that are already distributing upstream-provided, official AppImages.

TODO

  1. https://github.com/appimage/appimagekit 1.1 https://github.com/probonopd/linuxdeployqt 1.2 https://github.com/probonopd/uploadtool

PLEASE NOTE: For this to work, you need to enable Travis CI for your repository as described here prior to merging this, if you haven't already done so. Also, You need to set up GITHUB_TOKEN in Travis CI for this to work; please see https://github.com/probonopd/uploadtool.

If you have questions, AppImage developers are on #AppImage on irc.freenode.net.

DylanC commented 5 years ago

@Symbian9 - Hi there, The app is building with Travis CI on every push currently: https://travis-ci.org/PhotoFlare/photoflare/builds/

I did investigate AppImage before but I was unsure about the steps to take implementing it. I can look at this again if I have the time to research and implement it.

ghost commented 5 years ago

I did investigate AppImage before but I was unsure about the steps to take implementing it.

If you need any help with .travis.yml script setup for AppImage — ask @probonopd, he really could help you! ;-)

Also, think, @aferrero2707 could help with AppImage as he already provide few builds for other FOSS apps

There are many other Qt apps, that already setup AppImage, listed on AppImage Hub:

probonopd commented 5 years ago

Can you get it to build on Ubuntu trusty without

https://github.com/PhotoFlare/photoflare/blob/abd431aee50e828bff2b2b54218a29f2b26d0d71/.travis.yml#L9

Then it should be easy. (Happy to help.)

This is needed because the resulting binaries will only run on newer, but not older, systems than the build systems. Hence one should always build on the oldest still-supported distribution.

DylanC commented 5 years ago

@probonopd - I could go back to using certain methods supported on 16.04. https://github.com/PhotoFlare/photoflare/commit/7ab9a6d13bfb9529227083205001013e277451d7

I switched to using newer Qt methods for improved performance. Would I need to wait until 16.04 is unsupported before using the new methods again?

aferrero2707 commented 5 years ago

@DylanC @probonopd Sorry for joining the party a bit late... I am currently providing AppImages for a couple of Qt-based projects, and in both cases I am using a CentOS7 docker container for this.

You can see an example of working configuration here: https://github.com/aferrero2707/hdrmerge-ci

Let me know if something is not clear in the logic of the building and packaging scripts...

probonopd commented 5 years ago

Since Ubuntu 14.04 is currently the oldest still-supported LTS release, it is recommended to use nothing newer than it for building, in order to maximize binary compatibility with all still-supported releases.

DylanC commented 5 years ago

@probonopd - Although I would prefer 16.04 as the minimum version I can test 14.04 to see if this is possible. I can hold off those newer Qt methods until 18.04 becomes the oldest still supported LTS release.

aferrero2707 commented 5 years ago

@probonopd @DylanC as far as I can tell, the AppImages that I am building on CentOS7 run fine on Ubuntu 14.04, but they are based on a Glibc version lower than what Ubuntu 14.04 provides (2.17 instead 2.19, if I am not wrong...).

However, CentOS7 provides packages for Qt 5.9.2, if that is recent enough for you...

DylanC commented 5 years ago

@aferrero2707 - Qt 5.9.2 should definitely be new enough for me. Ubuntu 14.04 has Qt 5.2.1 which is quite old now.

@Symbian9 @probonopd @aferrero2707 - I've gotten over the hump of releasing v1.5.6.1. I should be free to start on this soon. I will put back in those 16.04 support methods and see can we build on 14.04 or 16.04.

I will report back here on my findings. I also will make a start on a folder and appimage build script. Let me know how else we can proceed with this appImage generation.

probonopd commented 5 years ago

Recent versions of Qt are available for 14.04, e.g., https://launchpad.net/~beineri/+archive/ubuntu/opt-qt-5.11.0-xenial

ghost commented 5 years ago

Recent versions of Qt are available for 14.04, e.g., https://launchpad.net/~beineri/+archive/ubuntu/opt-qt-5.11.0-xenial

You give link to Xenial (16.04)

Here is link for Trusty (14.04)

DylanC commented 5 years ago

@probonopd @Symbian9 - I tried to update the travis ci file to just build it on trusty, however it is having trouble finding the packages on the PPA:

E: Unable to locate package qt511base

probonopd commented 5 years ago

See the package names here: https://launchpad.net/~beineri/+archive/ubuntu/opt-qt-5.10.1-trusty

It's qt510base.

probonopd commented 5 years ago

Started work at

https://github.com/probonopd/photoflare/blob/f3df3cb2430d7abbba50f2bfa1e32e93e13a5d77/.travis.yml

but getting a compile error:

src/managers/FilterManager.cpp: In member function ‘QImage FilterManager::fitImage(const QImage&)’:
src/managers/FilterManager.cpp:388:18: error: ‘class Magick::Image’ has no member named ‘thumbnail’
     magickImage->thumbnail(Magick::Geometry(640,400,0,0,false,false));
                  ^
src/managers/FilterManager.cpp: In member function ‘QImage FilterManager::cropToCenter(const QImage&)’:
src/managers/FilterManager.cpp:465:18: error: ‘class Magick::Image’ has no member named ‘extent’
     magickImage->extent(Magick::Geometry(640,400,0,0,false,false),Magick::Color(127,127,127),Magick::StaticGravity);
                  ^
src/managers/FilterManager.cpp: In member function ‘QPolygon FilterManager::selectArea(const QImage&, const QPoint&, int, bool)’:
src/managers/FilterManager.cpp:773:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int j=0; j<magickImage->rows(); j++)
                                      ^
src/managers/FilterManager.cpp:776:45: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0; i<magickImage->columns(); i++)
                                             ^
src/managers/FilterManager.cpp:783:47: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if((i == magickImage->columns() - 1) && marked)
                                               ^
src/managers/FilterManager.cpp:786:75: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
             if(magickImage->pixelColor(i,j) == Magick::ColorRGB (0, 0, 0) && !marked ||
                                                                           ^
src/managers/FilterManager.cpp:801:47: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if((i == magickImage->columns() - 1) && marked)
                                               ^
src/managers/FilterManager.cpp:804:74: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
             if(magickImage->pixelColor(i,j) == Magick::ColorRGB(0, 0, 0) && !marked ||
                                                                          ^
src/managers/FilterManager.cpp: In member function ‘QImage FilterManager::floodFillOpacity(const QImage&, const QColor&, int)’:
src/managers/FilterManager.cpp:829:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int j=0; j<magickImage->rows(); j++)
                                      ^
src/managers/FilterManager.cpp:831:45: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0; i<magickImage->columns(); i++)
                                             ^
src/managers/FilterManager.cpp: At global scope:
src/managers/FilterManager.cpp:593:28: warning: ‘MagickLib::ChannelType channelById(int)’ defined but not used [-Wunused-function]
 static Magick::ChannelType channelById(int channelId)
                            ^
make: *** [FilterManager.o] Error 1
make: *** Waiting for unfinished jobs....

https://travis-ci.org/probonopd/photoflare/builds/466290284#L886

Could it be that it needs a newer GraphicksMagick than what comes with Ubuntu trusty? Can you please downgrade the requirement @DylanC?

probonopd commented 5 years ago

If worst comes to worst we need to compile hhttp://www.graphicsmagick.org on our own.

DylanC commented 5 years ago

@probonopd - I would prefer not to downgrade Graphicsmagick as that would mean removing PhotoFlare features from the latest released version. Do we have to go as far back as trusty or could we use xenial?

probonopd commented 5 years ago

Currently the oldest still-supported LTS release is trusty so we recommend that. I guess we can compile http://www.graphicsmagick.org there.