.github/workflows/appimage.yml #31
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#name: appimage | |
on: | |
# Triggers the workflow on push or pull request events but only for the main branch | |
#push: | |
# branches: [ main ] | |
#pull_request: | |
# branches: [ main ] | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
inputs: | |
ppa: | |
description: "ppa sufix" | |
artifact: | |
description: "result is artifact" | |
unpublished: | |
description: "don't wait to publish, take from build page" | |
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | |
jobs: | |
# This workflow contains a single job called "build" | |
build: | |
# The type of runner that the job will run on | |
runs-on: ubuntu-20.04 | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | |
- uses: actions/checkout@v3 | |
#this is also required at unpublished from now, not only at tests | |
# if: ${{ env.init != '' }} | |
# | |
#with: | |
# repository: colin-i/irc | |
# path: my-tools | |
#- uses: dsaltares/fetch-gh-release-asset@master | |
#this is locally: throw new Error("Parameter token or opts.auth is required"); | |
# with: | |
# repo: 'colin-i/test' | |
# file: 'ovideo.png' | |
# target: 'in/' #plague-linux.zip' | |
# #version: 'tags/1.5' | |
# #token: ${{ secrets.PAT }} | |
#Runs a set of commands using the runners shell | |
- name: Run a multi-line script | |
run: | | |
if [ -n "${{ env.init }}" ]; then | |
exit | |
fi | |
mkdir -p AppDir | |
file=runtime | |
arch_ai=-x86_64 | |
archfile=${file}${arch_ai} | |
kitpart () { | |
#this is not working anymore urlpart=`wget -q https://github.com/AppImage/AppImageKit/releases/latest -O - | grep "${archfile}" | head -n 1 | cut -d '"' -f 2` | |
urlpart=AppImage/AppImageKit/releases/latest/download/${archfile} | |
} | |
if [ ! -e "${file}" ]; then | |
kitpart | |
#"pkg2appimage-.*-x86_64.AppImage" | |
wget -c https://github.com/${urlpart} | |
mv ${archfile} ${file} | |
chmod a+x ${file} | |
fi | |
downdebok () { | |
src=${1} | |
arch=${2} | |
nr=${3} | |
pkg=${4} | |
inter=Packages${arch}${nr} | |
if [ ! -e "${inter}" ]; then | |
rep=${5} | |
wget http://${src}/ubuntu/dists/${6}/${rep}/binary-${arch}/Packages.xz -O ${inter}.xz | |
xz -d ${inter}.xz #f for multiple times | |
fi | |
#pipe to true to not stop the workflow if grep exits!=0 | |
debfilename=`grep "^Filename.*/${pkg}_" ${inter}` # || true is ok now but if package is not, without this, will be workflow fail | |
#if [ -z "${debfilename}" ]; then | |
# next time with if arch = i386 :i386 and reform array and try on | |
# not_are+=" ${pkg}" | |
# return | |
#fi | |
debfilename=`echo ${debfilename} | tail -1 | cut -d ' ' -f 2` | |
wget_url=http://${src}/ubuntu/${debfilename} | |
#https://launchpad.net/~colin-i/+archive/ubuntu/ppa/+files/${debfilename} | grep -o '[^/]*$' | |
maindeb=${pkg}.deb | |
wget ${wget_url} -O ${maindeb} | |
dpkg -x ${maindeb} AppDir | |
#ar x ${maindeb} data.tar.xz | |
#xz -fd data.tar.xz | |
#tar -xf data.tar -C AppDir | |
} | |
downdeb () { | |
if [ ! -e "${4}.deb" ]; then | |
downdebok ${1} ${2} ${3} ${4} ${5} focal | |
fi | |
} | |
if [ ! -e "ovideo.deb" ]; then | |
if [ "${{ github.event.inputs.unpublished }}" = "" ]; then | |
echo published | |
downdebok "ppa.launchpadcontent.net/colin-i/ppa${{ github.event.inputs.ppa }}" i386 1 ovideo main bionic | |
else | |
echo unpublished | |
# | |
if [ ! -e "lp2.py" ]; then | |
wget -q https://raw.githubusercontent.com/colin-i/test/master/lp2.py | |
# | |
#is already at focal | |
sudo apt install python3-launchpadlib | |
fi | |
name=`cat debian/changelog | head -1 | grep -o ^[^\ ]*` | |
version=`cat debian/changelog | head -1 | grep -Poe "[^\(]*(?=\))"` | |
arh=i386 | |
OUTPUT=$(python3 lp2.py ppa${{ github.event.inputs.ppa }} ${name} ${version} ${arh}) | |
wget ${OUTPUT}/+files/${name}_${version}_${arh}.deb -O ${name}.deb | |
# | |
#f=`wget -q https://launchpad.net/~colin-i/+archive/ubuntu/ppa${{ github.event.inputs.ppa }}/+build/${{ github.event.inputs.unpublished }} -O - | grep -o -e "[^\"]*\.deb\""` | |
#wget ${f:0:-1} -O ovideo.deb | |
dpkg -x ${name}.deb AppDir | |
fi | |
fi | |
#get the list with apt install --download-only and -o ... like in test/update/up , and then Get:1 ... jammy/main , ... , Get:2 ... jammy/universe | |
array=( \ | |
gcc-10-base:i386 glib-networking:i386 gstreamer1.0-plugins-base:i386 gstreamer1.0-plugins-good:i386 gstreamer1.0-x:i386 libaa1:i386 libasn1-8-heimdal:i386 libasound2:i386 libasyncns0:i386 libatk1.0-0:i386 libatomic1:i386 libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386 libavc1394-0:i386 libblkid1:i386 libbrotli1:i386 libbsd0:i386 libbz2-1.0:i386 libc6:i386 libcaca0:i386 libcairo-gobject2:i386 libcairo2:i386 libcap2:i386 libcdparanoia0:i386 libcom-err2:i386 libcrypt1:i386 libcups2:i386 libcurl3-gnutls:i386 libdatrie1:i386 libdb5.3:i386 libdbus-1-3:i386 libdrm-amdgpu1:i386 libdrm-intel1:i386 libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libdv4:i386 libedit2:i386 libelf1:i386 libexpat1:i386 libffi7:i386 libfftw3-double3:i386 libflac8:i386 libfontconfig1:i386 libfreetype6:i386 libfribidi0:i386 libgail-common:i386 libgail18:i386 libgcc-s1:i386 libgcrypt20:i386 libgdk-pixbuf2.0-0:i386 libglib2.0-0:i386 libgmp10:i386 libgnutls30:i386 libgomp1:i386 libgpg-error-l10n libgpg-error0:i386 libgpm2:i386 libgraphite2-3:i386 libgssapi-krb5-2:i386 libgssapi3-heimdal:i386 libgssdp-1.2-0:i386 libgstreamer-plugins-base1.0-0:i386 libgstreamer-plugins-good1.0-0:i386 libgstreamer1.0-0:i386 libgtk2.0-0:i386 libgudev-1.0-0:i386 libgupnp-1.2-0:i386 libharfbuzz0b:i386 libhcrypto4-heimdal:i386 libheimbase1-heimdal:i386 libheimntlm0-heimdal:i386 libhogweed5:i386 libhx509-5-heimdal:i386 libicu66:i386 libidn2-0:i386 libiec61883-0:i386 libjack-jackd2-0:i386 libjbig0:i386 libjpeg-turbo8:i386 libjpeg8:i386 libk5crypto3:i386 libkeyutils1:i386 libkrb5-26-heimdal:i386 libkrb5-3:i386 libkrb5support0:i386 liblcms2-2:i386 libldap-2.4-2:i386 libllvm9:i386 liblz4-1:i386 liblzma5:i386 libmount1:i386 libmp3lame0:i386 libmpg123-0:i386 libncurses6:i386 libncursesw6:i386 libnettle7:i386 libnghttp2-14:i386 libnuma1:i386 libogg0:i386 libopenjp2-7:i386 libopus0:i386 liborc-0.4-0:i386 libp11-kit0:i386 libpango-1.0-0:i386 libpangocairo-1.0-0:i386 libpangoft2-1.0-0:i386 libpciaccess0:i386 libpcre2-8-0:i386 libpcre3:i386 libpixman-1-0:i386 libpng16-16:i386 libproxy1v5:i386 libpsl5:i386 libpulse0:i386 libraw1394-11:i386 libreadline8:i386 libroken18-heimdal:i386 librsvg2-2:i386 librsvg2-common:i386 librtmp1:i386 libsamplerate0:i386 libsasl2-2:i386 libsasl2-modules:i386 libsasl2-modules-db:i386 libsbc1:i386 libselinux1:i386 libshout3:i386 libslang2:i386 libsnappy1v5:i386 libsndfile1:i386 libsoup2.4-1:i386 libsoxr0:i386 libspeex1:i386 libsqlite3-0:i386 libssh-4:i386 libssl1.1:i386 libstdc++6:i386 libsystemd0:i386 libtag1v5:i386 libtag1v5-vanilla:i386 libtasn1-6:i386 libthai0:i386 libtheora0:i386 libtiff5:i386 libtinfo6:i386 libtwolame0:i386 libudev1:i386 libunistring2:i386 libusb-1.0-0:i386 libuuid1:i386 libv4l-0:i386 libv4lconvert0:i386 libvdpau1:i386 libvisual-0.4-0:i386 libvorbis0a:i386 libvorbisenc2:i386 libvorbisfile3:i386 libvpx6:i386 libvulkan1:i386 libwavpack1:i386 libwayland-client0:i386 libwayland-cursor0:i386 libwayland-egl1:i386 libwebp6:i386 libwebpmux3:i386 libwebrtc-audio-processing1:i386 libwind0-heimdal:i386 libwrap0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386 libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-present0:i386 libxcb-randr0:i386 libxcb-render0:i386 libxcb-shm0:i386 libxcb-sync1:i386 libxcb-xfixes0:i386 libxcb1:i386 libxcomposite1:i386 libxcursor1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxi6:i386 libxinerama1:i386 libxkbcommon0:i386 libxml2:i386 libxrandr2:i386 libxrender1:i386 libxshmfence1:i386 libxss1:i386 libxv1:i386 libxxf86vm1:i386 libzstd1:i386 mesa-vdpau-drivers:i386 mesa-vulkan-drivers:i386 ocl-icd-libopencl1:i386 vdpau-driver-all:i386 zlib1g:i386 \ | |
) | |
for var in "${array[@]}" | |
do | |
#base for playback, good for pixbuf - these , at runtime, warns many main/universe missings | |
if [ -n "$(echo -n ${var} | grep -o : )" ]; then | |
#var=`echo $var | tr 'Q' '\n' | xargs echo ` | |
var=`echo -n ${var} | grep -o -e "^[^:]*"` | |
downdeb "ro.archive.ubuntu.com" i386 2 ${var} main | |
else | |
downdeb "ro.archive.ubuntu.com" amd64 1 ${var} main | |
fi | |
done | |
array=( \ | |
gstreamer1.0-plugins-bad:i386 i965-va-driver:i386 intel-media-va-driver:i386 libaom0:i386 libass9:i386 libavcodec58:i386 libavutil56:i386 libbs2b0:i386 libchromaprint1:i386 libcodec2-0.9:i386 libdc1394-22:i386 libdca0:i386 libde265-0:i386 libdvdnav4:i386 libdvdread7:i386 libfaad2:i386 libflite1:i386 libfluidsynth2:i386 libgme0:i386 libgsm1:i386 libgstreamer-plugins-bad1.0-0:i386 libgupnp-igd-1.0-4:i386 libigdgmm11:i386 libilmbase24:i386 libinstpatch-1.0-2:i386 libkate1:i386 liblilv-0-0:i386 libmjpegutils-2.1-0:i386 libmms0:i386 libmodplug1:i386 libmpcdec6:i386 libmpeg2encpp-2.1-0:i386 libmplex2-2.1-0:i386 libnice10:i386 libofa0:i386 libopenal-data libopenal1:i386 libopenexr24:i386 libopenmpt0:i386 libsdl2-2.0-0:i386 libserd-0-0:i386 libshine3:i386 libsndio7.0:i386 libsord-0-0:i386 libsoundtouch1:i386 libspandsp2:i386 libsratom-0-0:i386 libsrt1:i386 libsrtp2-1:i386 libswresample3:i386 libusrsctp1:i386 libva-drm2:i386 libva-x11-2:i386 libva2:i386 libvo-aacenc0:i386 libvo-amrwbenc0:i386 libwildmidi2:i386 libx264-155:i386 libx265-179:i386 libxvidcore4:i386 libzbar0:i386 libzvbi-common libzvbi0:i386 mesa-va-drivers:i386 timgm6mb-soundfont va-driver-all:i386 \ | |
) | |
for var in "${array[@]}" | |
do | |
#bad for mxf | |
if [ -n "$(echo -n ${var} | grep -o : )" ]; then | |
var=`echo -n ${var} | grep -o -e "^[^:]*"` | |
downdeb "ro.archive.ubuntu.com" i386 3 ${var} universe | |
else | |
downdeb "ro.archive.ubuntu.com" amd64 2 ${var} universe | |
fi | |
done | |
#echo ${not_are} | |
#exit | |
cd AppDir | |
file2=AppRun | |
if [ ! -e "${file2}" ]; then | |
if [ -z "${urlpart}" ]; then | |
kitpart | |
fi | |
archfile2=${file2}${arch_ai} | |
urlpart=${urlpart:0:`echo ${urlpart} | grep -ob '[^/]*$' | cut -d ':' -f 1`}${archfile2} | |
wget -c https://github.com/${urlpart} | |
chmod a+x ${archfile2} | |
mv ${archfile2} ${file2} | |
fi | |
pngfile=ovideo.png | |
if [ ! -e "${pngfile}" ]; then | |
wget https://github.com/colin-i/test/releases/download/1.5/ovideo.png -O ${pngfile} #O for multiple times | |
cat > ovideo.desktop <<EOF | |
[Desktop Entry] | |
Type=Application | |
Name=OVideo | |
Exec=ovideo | |
Icon=ovideo | |
Categories=AudioVideo | |
EOF | |
ln -s ${pngfile} .DirIcon #f for multiple times | |
fi | |
# | |
cd usr/lib | |
if [ ! -e "gstreamer-1.0" ]; then | |
echo ln | |
#this is not ok: only when running the appimage file: when testing with GST_DEBUG=5: GST_PLUGIN_SYSTEM_PATH will miss /i386-linux-gnu | |
ln -s i386-linux-gnu/gstreamer-1.0 gstreamer-1.0 | |
#this also at runtime, missing | |
ln -s i386-linux-gnu/pulseaudio/libpulsecommon-13.99.so libpulsecommon-13.99.so | |
fi | |
cd ../../ | |
# | |
if [ ! -e "usr/bin/ostream" ]; then | |
echo launcher | |
gpixd=/usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/ | |
gpixf=${gpixd}`ls -1 .${gpixd} | head -1`/loaders | |
cd usr/bin | |
mv ovideo ostream | |
#live64 is not having /lib/ld-linux.so.2. without librarypath will wrong libc bionic to jammy | |
#./lib since zlib1g. ./usr/lib for liblilv-0.so.0 | |
#this is in tmp folder, don't check inside if loaders.cache exists | |
# --library-path \"${rootbase}... will be with problems | |
#if there are problems, try this: GTK_MODULE_DIR | |
#to not see GST_PLUGIN_SCANNER warning, extract, run once, it is writing elsewhere not in appimg folders, run second time and is ok | |
#if is same with or without GST_PLUGIN_SCANNER then why set? GST_DEBUG=6 will state "Trying GST_PLUGIN_SCANNER env var" so the fault is from there | |
cat > ovideo <<EOF | |
#!/bin/bash | |
cd "\$(dirname "\$0")" | |
cd ../../ | |
loader="./lib/ld-linux.so.2" | |
hom=\${HOME}/ovideo | |
mkdir -p "\${hom}" | |
gpmf=\${hom}/loaders.cache | |
rootbase=\$(pwd) | |
paths="\${rootbase}/lib:\${rootbase}/usr/lib:\${rootbase}/usr/lib/i386-linux-gnu:\${rootbase}/lib/i386-linux-gnu" | |
LD_LIBRARY_PATH="\${paths}" \ | |
GDK_PIXBUF_MODULEDIR="\${rootbase}${gpixf}" \ | |
\${loader} .${gpixd}gdk-pixbuf-query-loaders > "\${gpmf}" | |
LD_LIBRARY_PATH="\${paths}" \ | |
GDK_PIXBUF_MODULE_FILE="\${gpmf}" \ | |
GIO_EXTRA_MODULES="\${rootbase}/usr/lib/i386-linux-gnu/gio/modules" \ | |
GST_PLUGIN_SCANNER="\${rootbase}/usr/lib/i386-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-plugin-scanner" \ | |
GST_PLUGIN_SYSTEM_PATH="\${rootbase}/usr/lib/gstreamer-1.0" \ | |
\${loader} ./usr/bin/ostream "\${rootbase}" | |
EOF | |
chmod 755 ovideo | |
cd ../../ | |
fi | |
#metadata file | |
mi=usr/share/metainfo | |
mif=${mi}/com.colin.ovideo.appdata.xml | |
if [ ! -e "${mif}" ]; then | |
mkdir -p ${mi} | |
cat > ${mif} <<EOF | |
<?xml version="1.0" encoding="UTF-8"?> | |
<!-- Copyright 2022 --> | |
<component type="desktop-application"> | |
<id>com.colin.ovideo</id> | |
<metadata_license>FSFAP</metadata_license> | |
<name>O Video</name> | |
<summary>Video Editor</summary> | |
<description> | |
<ul> | |
<li>Create videos</li> | |
<li>Add animations</li> | |
<li>Edit frames</li> | |
</ul> | |
</description> | |
<screenshots> | |
<screenshot type="default"> | |
<caption>OVideo image</caption> | |
<image>https://raw.github.com/colin-i/ostream/master/arh/ovideo.png</image> | |
</screenshot> | |
</screenshots> | |
<url type="homepage">https://www.github.com/colin-i/ostream</url> | |
<content_rating/> | |
</component> | |
EOF | |
fi | |
# | |
cd .. | |
# | |
if [ ! -e "ovideo.AppImage" ]; then | |
mksquashfs AppDir ovideo.squashfs -root-owned -noappend | |
cat runtime >> ovideo.AppImage | |
cat ovideo.squashfs >> ovideo.AppImage | |
chmod a+x ovideo.AppImage | |
fi | |
#http://ro.archive.ubuntu.com/ubuntu/dists/bionic/main/binary-i386/Packages.xz | |
#https://stackoverflow.com/questions/9981099/are-exported-private-keys-in-gpg-still-encrypted | |
#echo -n ${{ secrets.PASS }} > pas.txt | |
#echo "tag=refs/tags/1.5" >> $GITHUB_ENV | |
#echo $tag ${{ env.tag }} | |
#ARCH=i686 ${file} ./ovideo.yml | |
- name: test artifact | |
if: ${{ github.event.inputs.artifact != '' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: appimage | |
path: ./*.AppImage |