name: Packaging(Linux) on: push: branches: - master - fix* paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' pull_request: paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' - 'data/translations/*.ts' workflow_dispatch: env: PRODUCT: flameshot RELEASE: 1 # dockerfiles, see https://github.com/flameshot-org/flameshot-dockerfiles # docker images, see https://quay.io/repository/flameshot-org/ci-building DOCKER_REPO: quay.io/flameshot-org/ci-building # building tool: https://github.com/flameshot-org/packpack PACKPACK_REPO: flameshot-org/packpack jobs: # deb-pack: # name: Build deb on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} # runs-on: ubuntu-latest # strategy: # fail-fast: false # matrix: # dist: # - { # name: debian-11, # os: debian, # symbol: bullseye, # arch: amd64 # } # - { # name: debian-12, # os: debian, # symbol: bookworm, # arch: amd64 # } # - { # name: ubuntu-22.04, # os: ubuntu, # symbol: jammy, # arch: amd64 # } # - { # name: ubuntu-24.04, # os: ubuntu, # symbol: noble, # arch: amd64 # } # # steps: # - name: Set up Docker Buildx # uses: docker/setup-buildx-action@v3 # - name: Set up QEMU # uses: docker/setup-qemu-action@v3 # - name: Checkout Source code # if: github.event_name == 'push' # uses: actions/checkout@v4 # with: # fetch-depth: 0 # ref: master # - name: Checkout Source code # if: github.event_name == 'pull_request' # uses: actions/checkout@v4 # with: # fetch-depth: 0 # ref: ${{ github.event.pull_request.head.sha }} # - name: Set env & Print flameshot version # shell: bash # run: | # last_committed_tag=$(git tag -l --sort=-v:refname | head -1) # git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) # git_hash=$(git rev-parse --short HEAD) # ver_info=${last_committed_tag}+git${git_revno}.${git_hash} # echo "=======FLAMESHOT VERSION========" # echo ${last_committed_tag:1} # echo "Details: ${ver_info}" # echo "================================" # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV # echo "VER_INFO=${ver_info}" >> $GITHUB_ENV # - name: Get packpack tool # uses: actions/checkout@v4 # with: # repository: ${{ env.PACKPACK_REPO }} # path: tools # ref: multiarch # set-safe-directory: $GITHUB_WORKSPACE/tools # - name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} # env: # OS: ${{ matrix.dist.os }} # DIST: ${{ matrix.dist.symbol }} # #DOCKER_ARCH: ${{ matrix.dist.arch }} # ## I cannot see if ARCH is used anywhere. Should we remove it? # #ARCH: ${{ matrix.dist.arch }} # run: | # cp -r $GITHUB_WORKSPACE/packaging/debian $GITHUB_WORKSPACE # bash $GITHUB_WORKSPACE/tools/packpack # mv $GITHUB_WORKSPACE/build/${PRODUCT}_${VERSION}-${RELEASE}_${{ matrix.dist.arch }}.deb $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb # - name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package # run: | # cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } # sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb | tee ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum # - name: Artifact Upload # uses: actions/upload-artifact@v4 # with: # name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }} # path: | # ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb # ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum # overwrite: true # # rpm-pack: # name: Build rpm on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} # runs-on: ubuntu-latest # strategy: # fail-fast: false # matrix: # dist: # - { # name: fedora-41, # os: fedora, # symbol: 41, # arch: x86_64 # } # - { # name: fedora-42, # os: fedora, # symbol: 42, # arch: x86_64 # } # - { # name: opensuse-leap-15.6, # os: opensuse-leap, # symbol: 15.6, # arch: x86_64 # } # steps: # - name: Checkout Source code # if: github.event_name == 'push' # uses: actions/checkout@v4 # with: # fetch-depth: 0 # ref: master # - name: Checkout Source code # if: github.event_name == 'pull_request' # uses: actions/checkout@v4 # with: # fetch-depth: 0 # ref: ${{ github.event.pull_request.head.sha }} # - name: Set env & Print flameshot version # shell: bash # run: | # last_committed_tag=$(git tag -l --sort=-v:refname | head -1) # git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) # git_hash=$(git rev-parse --short HEAD) # ver_info=${last_committed_tag}+git${git_revno}.${git_hash} # echo "=======FLAMESHOT VERSION========" # echo ${last_committed_tag:1} # echo "Details: ${ver_info}" # echo "================================" # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV # echo "VER_INFO=${ver_info}" >> $GITHUB_ENV # - name: Get packpack tool # uses: actions/checkout@v4 # with: # repository: ${{ env.PACKPACK_REPO }} # path: tools # ref: master # set-safe-directory: $GITHUB_WORKSPACE/tools # - name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} # if: matrix.dist.os == 'fedora' # run: | # mkdir $GITHUB_WORKSPACE/rpm # cp $GITHUB_WORKSPACE/packaging/rpm/fedora/flameshot.spec $GITHUB_WORKSPACE/rpm # bash $GITHUB_WORKSPACE/tools/packpack # env: # OS: ${{ matrix.dist.os }} # DIST: ${{ matrix.dist.symbol }} # - name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} # if: matrix.dist.os == 'opensuse-leap' # run: | # mkdir $GITHUB_WORKSPACE/rpm # cp $GITHUB_WORKSPACE/packaging/rpm/opensuse/flameshot.spec $GITHUB_WORKSPACE/rpm # bash $GITHUB_WORKSPACE/tools/packpack # env: # OS: ${{ matrix.dist.os }} # DIST: ${{ matrix.dist.symbol }} # - name: Package Clean # if: matrix.dist.os == 'fedora' # run: | # rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-debuginfo-*.rpm # rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-debugsource-*.rpm # rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-*.src.rpm # rm -f ${{ github.workspace }}/build/build.log # - name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package # if: matrix.dist.os == 'fedora' # run: | # cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } # sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.fc*.${{ matrix.dist.arch }}.rpm | tee ${PRODUCT}-${VERSION}-${RELEASE}.fc${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum # - name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package # if: matrix.dist.os == 'opensuse-leap' # run: | # mv $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-lp*.${{ matrix.dist.arch }}.rpm $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm # cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } # sha256sum ${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm | tee ${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum # - name: Artifact Upload # if: matrix.dist.os == 'fedora' # uses: actions/upload-artifact@v4 # with: # name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }} # path: | # ${{ github.workspace }}/build/ # overwrite: true # # - name: Artifact Upload # if: matrix.dist.os == 'opensuse-leap' # uses: actions/upload-artifact@v4 # with: # name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }} # path: | # ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm # ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum # overwrite: true # # appimage-pack: # name: Build appimage on ${{ matrix.config.name }} # runs-on: ubuntu-latest # strategy: # fail-fast: false # matrix: # config: # - { # name: ubuntu-22.04, # os: ubuntu, # symbol: jammy, # arch: amd64, # image_repo: quay.io/flameshot-org/ci-building # } # container: # image: ${{ matrix.config.image_repo }}:${{ matrix.config.os }}-${{ matrix.config.symbol }} # options: --cap-add SYS_ADMIN --device /dev/fuse --security-opt apparmor:unconfined # steps: # - name: # shell: bash # run: | # git config --global --add safe.directory "$GITHUB_WORKSPACE" # # - name: Checkout Source code # if: github.event_name == 'push' # uses: actions/checkout@v4 # with: # fetch-depth: 0 # ref: master # - name: Checkout Source code # if: github.event_name == 'pull_request' # uses: actions/checkout@v4 # with: # fetch-depth: 0 # ref: ${{ github.event.pull_request.head.sha }} # - name: Set env & Print flameshot version # shell: bash # run: | # last_committed_tag=$(git tag -l --sort=-v:refname | head -1) # git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) # git_hash=$(git rev-parse --short HEAD) # ver_info=${last_committed_tag}+git${git_revno}.${git_hash} # echo "=======FLAMESHOT VERSION========" # echo ${last_committed_tag:1} # echo "Details: ${ver_info}" # echo "================================" # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV # echo "VER_INFO=${ver_info}" >> $GITHUB_ENV # - name: Install Dependencies # run: | # sudo apt-get -y -qq update # sudo apt-get -y --no-install-recommends install \ # python3 \ # python3-pip \ # fuse \ # patchelf \ # cmake \ # extra-cmake-modules \ # build-essential \ # qt5-qmake \ # qtbase5-dev \ # qtbase5-dev-tools \ # qttools5-dev-tools \ # qttools5-dev \ # libqt5dbus5 \ # libqt5network5 \ # libqt5core5a \ # libqt5widgets5 \ # libqt5gui5 \ # libqt5svg5-dev \ # appstream \ # hicolor-icon-theme \ # fcitx-frontend-qt5 \ # openssl \ # ca-certificates \ # jq # # - name: Get go-appimage tool # # Will not use linuxdeployqt anymore, because it suopprts currently still-supported mainstream distribution, # # which is glibc 2.23. For more information, please see https://github.com/probonopd/linuxdeployqt/issues/340. # # Will try new tool https://github.com/probonopd/go-appimage written in golang by probonopd. # run: | # wget $(curl https://api.github.com/repos/probonopd/go-appimage/releases | jq -r '.[] | select(.tag_name == "continuous") | .assets[] | select((.name | endswith("x86_64.AppImage")) and (.name | contains("appimagetool"))) | .browser_download_url') -O appimagetool # # chmod +x appimagetool # env: # APPIMAGETOOL_ARCH: x86_64 # - name: Packaging appimage # run: | # set -x # APPIMAGE_DST_PATH=$GITHUB_WORKSPACE/${PRODUCT}.AppDir # mkdir -p ${APPIMAGE_DST_PATH} # # cd $GITHUB_WORKSPACE # cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr -DUSE_LAUNCHER_ABSOLUTE_PATH:BOOL=OFF # make -j$(nproc) DESTDIR=${APPIMAGE_DST_PATH} install # # $GITHUB_WORKSPACE/appimagetool -s deploy "${APPIMAGE_DST_PATH}/usr/share/applications/org.flameshot.Flameshot.desktop" # # mkdir -p ${APPIMAGE_DST_PATH}/usr/plugins/platforminputcontexts # cp \ # /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so \ # ${APPIMAGE_DST_PATH}/usr/plugins/platforminputcontexts/ # # cp \ # $GITHUB_WORKSPACE/data/img/app/org.flameshot.Flameshot.png \ # ${APPIMAGE_DST_PATH}/ # # if [ -f "${APPIMAGE_DST_PATH}/lib/x86_64-linux-gnu/libxcb-glx.so.0" ]; then # rm ${APPIMAGE_DST_PATH}/lib/x86_64-linux-gnu/libxcb-glx.so.0 # fi # # chmod +x ${APPIMAGE_DST_PATH}/usr/lib64/ld-*.so.* # # # VERSION=${VERSION} $GITHUB_WORKSPACE/appimagetool "${APPIMAGE_DST_PATH}" # mv $GITHUB_WORKSPACE/Flameshot-${VERSION}-x86_64.AppImage $GITHUB_WORKSPACE/Flameshot-${VERSION}.x86_64.AppImage # # # - name: SHA256Sum of appimage package # run: | # cd "$GITHUB_WORKSPACE/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/'!"; exit 11 ; } # sha256sum Flameshot-${VERSION}.x86_64.AppImage | tee Flameshot-${VERSION}.x86_64.AppImage.sha256sum # - name: Artifact Upload # uses: actions/upload-artifact@v4 # with: # name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-appimage-x86_64 # path: | # ${{ github.workspace }}/Flameshot-*.x86_64.AppImage # ${{ github.workspace }}/Flameshot-*.x86_64.AppImage.sha256sum # overwrite: true # flatpak-pack: name: Build flatpak on ubuntu 24.04 runs-on: ubuntu-24.04 steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV - name: Setup flatpak run: | sudo apt-get -y -qq update sudo apt-get install -y flatpak flatpak-builder - name: Setup Flathub run: | flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install -y --noninteractive flathub org.kde.Sdk//5.15 org.kde.Platform//5.15 - name: Packaging flatpak run: | BUNDLE="org.flameshot.Flameshot_${VERSION}_x86_64.flatpak" MANIFEST_PATH=$GITHUB_WORKSPACE/packaging/flatpak/org.flameshot.Flameshot.yml RUNTIME_REPO="https://flathub.org/repo/flathub.flatpakrepo" APP_ID="org.flameshot.Flameshot" BRANCH="master" flatpak-builder --user --disable-rofiles-fuse --repo=repo --force-clean flatpak_app ${MANIFEST_PATH} --install-deps-from=flathub flatpak build-bundle repo ${BUNDLE} --runtime-repo=${RUNTIME_REPO} ${APP_ID} ${BRANCH} mv $GITHUB_WORKSPACE/org.flameshot.Flameshot_${VERSION}_x86_64.flatpak $GITHUB_WORKSPACE/org.flameshot.Flameshot-${VERSION}.x86_64.flatpak - name: SHA256Sum of flatpak package run: | cd "$GITHUB_WORKSPACE/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/'!"; exit 11 ; } sha256sum org.flameshot.Flameshot-${VERSION}.x86_64.flatpak | tee org.flameshot.Flameshot-${VERSION}.x86_64.flatpak.sha256sum - name: Artifact Upload uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-flatpak-x86_64 path: | ${{ github.workspace }}/org.flameshot.Flameshot-*.x86_64.flatpak ${{ github.workspace }}/org.flameshot.Flameshot-*.x86_64.flatpak.sha256sum overwrite: true snap-pack: name: Build snap on ubuntu latest runs-on: ubuntu-latest steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV - name: Packaging snap uses: snapcore/action-build@v1 id: snapcraft - name: Rename snap name shell: bash run: | mkdir -p $GITHUB_WORKSPACE/build cp ${{ steps.snapcraft.outputs.snap }} $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap - name: SHA256Sum of snap package run: | cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap | tee ${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap.sha256sum - name: Artifact Upload uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-snap-x86_64 path: | ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.amd64.snap ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.amd64.snap.sha256sum overwrite: true