1+ name : build
2+ on : [push]
3+
4+ env :
5+ LIBPLIST_VERSION : 2.2.0
6+ OPENSSL_VERSION : 1.1.1h
7+ LIBCURL_VERSION : 7.73.0
8+ ZLIB_VERSION : 1.2.11
9+ LIBZIP_VERSION : 1.7.3
10+ LIBGENERAL_VERSION : 34
11+ LIBFRAGMENTZIP_VERSION : 60
12+ LIBIRECOVERY_VERSION : 1.0.0
13+
14+ jobs :
15+ build-linux :
16+ runs-on : ubuntu-latest
17+ env :
18+ TOOLCHAIN : x86_64-linux-musl-native
19+ TRIPLE : x86_64-linux-musl
20+ steps :
21+ - uses : actions/checkout@v1
22+ with :
23+ submodules : recursive
24+
25+ - name : cache files
26+ uses : actions/cache@v2
27+ with :
28+ path : |
29+ ~/.ccache
30+ ~/dep_src
31+ key : build-linux-${ { env.GITHUB_SHA } }
32+ restore-keys : |
33+ build-linux-
34+
35+ - name : setup environment
36+ run : |
37+ export DOWNLOAD_PATH=${HOME}/dep_src
38+ export DEP_PATH=${HOME}/build
39+ export ROOT=${HOME}/root
40+ mkdir -p ${DOWNLOAD_PATH} ${DEP_PATH} ${ROOT}
41+ echo "DOWNLOAD_PATH=${DOWNLOAD_PATH}" >> $GITHUB_ENV
42+ echo "DEP_PATH=${DEP_PATH}" >> $GITHUB_ENV
43+ echo "ROOT=${ROOT}" >> $GITHUB_ENV
44+ echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
45+ echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
46+ sudo apt-get install libreadline-dev
47+
48+ - name : setup toolchain
49+ run : |
50+ sudo apt-get install -y ccache
51+ wget -q -nc -P ${DOWNLOAD_PATH} https://musl.cc/${TOOLCHAIN}.tgz
52+ tar xf ${DOWNLOAD_PATH}/${TOOLCHAIN}.tgz -C ${HOME}
53+ echo "${HOME}/${TOOLCHAIN}/bin" >> $GITHUB_PATH
54+ echo "CC=ccache gcc" >> $GITHUB_ENV
55+ echo "CXX=ccache g++" >> $GITHUB_ENV
56+ echo "CFLAGS=-static -I${ROOT}/usr/include" >> $GITHUB_ENV
57+ echo "LDFLAGS=-L${ROOT}/usr/lib" >> $GITHUB_ENV
58+ echo "PKG_CONFIG_PATH=${ROOT}/usr/lib/pkgconfig" >> $GITHUB_ENV
59+ echo "LD_LIBRARY_PATH=${ROOT}/usr/lib" >> $GITHUB_ENV
60+
61+ - name : build libplist
62+ run : |
63+ wget -q -nc -P ${DOWNLOAD_PATH} https://github.com/libimobiledevice/libplist/releases/download/${LIBPLIST_VERSION}/libplist-${LIBPLIST_VERSION}.tar.bz2
64+ tar xf ${DOWNLOAD_PATH}/libplist-${LIBPLIST_VERSION}.tar.bz2 -C ${DEP_PATH}
65+ cd ${DEP_PATH}/libplist-${LIBPLIST_VERSION}
66+ ./configure --host=${TRIPLE} --prefix=/usr --without-cython --enable-static --disable-shared
67+ make -j$(nproc)
68+ make install DESTDIR="${ROOT}"
69+
70+ - name : build libirecovery
71+ run : |
72+ wget -q -nc -P ${DOWNLOAD_PATH} https://github.com/libimobiledevice/libirecovery/releases/download/${LIBIRECOVERY_VERSION}/libirecovery-${LIBIRECOVERY_VERSION}.tar.bz2
73+ tar xf ${DOWNLOAD_PATH}/libirecovery-${LIBIRECOVERY_VERSION}.tar.bz2 -C ${DEP_PATH}
74+ cd ${DEP_PATH}/libirecovery-${LIBIRECOVERY_VERSION}
75+ wget https://gist.github.com/1Conan/2d015aad17f87f171b32ebfd9f48fb96/raw/c12fca047f8b0bba1c8983470bf863d80d7e1c1d/libirecovery.patch
76+ patch -p1 < libirecovery.patch
77+ libtoolize --force
78+ aclocal -I m4
79+ autoheader
80+ automake --add-missing
81+ autoconf
82+ ./configure --host=${TRIPLE} --prefix=/usr --enable-static --disable-shared --with-dummy
83+ make -j$(nproc)
84+ make install DESTDIR="${ROOT}"
85+
86+ - name : build zlib
87+ run : |
88+ wget -q -nc -P ${DOWNLOAD_PATH} https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz
89+ tar xf ${DOWNLOAD_PATH}/zlib-${ZLIB_VERSION}.tar.gz -C ${DEP_PATH}
90+ cd ${DEP_PATH}/zlib-${ZLIB_VERSION}
91+ ./configure --static --prefix=/usr
92+ make -j$(nproc)
93+ make install DESTDIR="${ROOT}"
94+
95+ - name : build openssl
96+ run : |
97+ wget -q -nc -P ${DOWNLOAD_PATH} https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
98+ tar xf ${DOWNLOAD_PATH}/openssl-${OPENSSL_VERSION}.tar.gz -C ${DEP_PATH}
99+ cd ${DEP_PATH}/openssl-${OPENSSL_VERSION}
100+ ./config --prefix=/usr --openssldir=/etc/ssl --static -static
101+ make -j$(nproc)
102+ make install_sw DESTDIR="${ROOT}"
103+
104+ - name : build libcurl
105+ run : |
106+ wget -q -nc -P ${DOWNLOAD_PATH} https://curl.haxx.se/download/curl-${LIBCURL_VERSION}.tar.gz
107+ tar xf ${DOWNLOAD_PATH}/curl-${LIBCURL_VERSION}.tar.gz -C ${DEP_PATH}
108+ cd ${DEP_PATH}/curl-${LIBCURL_VERSION}
109+ ./configure \
110+ --prefix=/usr \
111+ --host=${TRIPLE} \
112+ --enable-static \
113+ --disable-shared \
114+ --enable-ipv6 \
115+ --disable-dependency-tracking \
116+ --with-zlib=${ROOT}/usr \
117+ --with-ssl=${ROOT}/usr
118+ make -j$(nproc)
119+ make install DESTDIR="${ROOT}"
120+
121+ - name : build libzip
122+ run : |
123+ wget -q -nc -P ${DOWNLOAD_PATH} https://libzip.org/download/libzip-${LIBZIP_VERSION}.tar.gz
124+ tar xf ${DOWNLOAD_PATH}/libzip-${LIBZIP_VERSION}.tar.gz -C ${DEP_PATH}
125+ cd ${DEP_PATH}/libzip-${LIBZIP_VERSION}
126+ cmake \
127+ -DBUILD_SHARED_LIBS=OFF \
128+ -DCMAKE_EXE_LINKER_FLAGS="-static" \
129+ -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \
130+ -DENABLE_BZIP2=FALSE \
131+ -DENABLE_LZMA=FALSE \
132+ -DCMAKE_INSTALL_PREFIX=/usr \
133+ -DSKIP_BUILD_RPATH=TRUE \
134+ -DZLIB_LIBRARY=${ROOT}/usr/lib/libz.a \
135+ -DZLIB_INCLUDE_DIR=${ROOT}/usr/include \
136+ -DOPENSSL_CRYPTO_LIBRARY=${ROOT}/usr/lib/libcrypto.a \
137+ -DOPENSSL_SSL_LIBRARY=${ROOT}/usr/lib/libssl.a
138+ make -j$(nproc)
139+ make install DESTDIR="${ROOT}"
140+
141+ - name : build libgeneral
142+ run : |
143+ rm -rf ${DEP_PATH}/libgeneral
144+ git clone https://github.com/tihmstar/libgeneral ${DEP_PATH}/libgeneral
145+ cd ${DEP_PATH}/libgeneral
146+ git checkout f571dc2949c4ca4c9b5db72fff35878717e5ce0b
147+ ./autogen.sh --enable-static --disable-shared --host=${TRIPLE} --prefix=/usr
148+ make -j$(nproc)
149+ make install DESTDIR="${ROOT}"
150+ - name : build libfragmentzip
151+ run : |
152+ rm -rf ${DEP_PATH}/libfragmentzip
153+ git clone https://github.com/tihmstar/libfragmentzip.git ${DEP_PATH}/libfragmentzip
154+ cd ${DEP_PATH}/libfragmentzip
155+ ./autogen.sh curl_LIBS="${ROOT}/usr/lib/libcurl.a" \
156+ --prefix=/usr \
157+ --host=${TRIPLE} \
158+ --enable-static \
159+ --disable-shared
160+ make -j$(nproc)
161+ make install DESTDIR="${ROOT}"
162+ - name : configure
163+ run : ./autogen.sh --host=${TRIPLE} --enable-static --disable-shared
164+
165+ - name : build
166+ run : make LDFLAGS="-all-static ${LDFLAGS}"
167+
168+ - uses : actions/upload-artifact@v1
169+ with :
170+ name : tsschecker_linux
171+ path : tsschecker/tsschecker
172+
173+ build-windows :
174+ runs-on : ubuntu-latest
175+ env :
176+ TOOLCHAIN : x86_64-w64-mingw32-cross
177+ TRIPLE : x86_64-w64-mingw32
178+ steps :
179+ - uses : actions/checkout@v1
180+ with :
181+ submodules : recursive
182+
183+ - name : ccache cache files
184+ uses : actions/cache@v2
185+ with :
186+ path : |
187+ ~/.ccache
188+ ~/dep_src
189+ key : build-windows-${ { env.GITHUB_SHA } }
190+ restore-keys : |
191+ build-windows-
192+
193+ - name : setup environment
194+ run : |
195+ export DOWNLOAD_PATH=${HOME}/dep_src
196+ export DEP_PATH=${HOME}/build
197+ export ROOT=${HOME}/root
198+ mkdir -p ${DOWNLOAD_PATH} ${DEP_PATH} ${ROOT}
199+ echo "DOWNLOAD_PATH=${DOWNLOAD_PATH}" >> $GITHUB_ENV
200+ echo "DEP_PATH=${DEP_PATH}" >> $GITHUB_ENV
201+ echo "ROOT=${ROOT}" >> $GITHUB_ENV
202+ echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
203+ echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
204+ sudo apt-get install libreadline-dev
205+
206+ - name : setup toolchain
207+ run : |
208+ sudo apt-get install -y ccache
209+ wget -q -nc -P ${DOWNLOAD_PATH} https://musl.cc/${TOOLCHAIN}.tgz
210+ tar xf ${DOWNLOAD_PATH}/${TOOLCHAIN}.tgz -C ${HOME}
211+ echo "${HOME}/${TOOLCHAIN}/bin" >> $GITHUB_PATH
212+ echo "CC=ccache x86_64-w64-mingw32-gcc" >> $GITHUB_ENV
213+ echo "CXX=ccache x86_64-w64-mingw32-g++" >> $GITHUB_ENV
214+ echo "CFLAGS=-static" >> $GITHUB_ENV
215+ echo "CPPFLAGS=-I${ROOT}/usr/include -I${HOME}/${TOOLCHAIN}/${TRIPLE}/include -DWIN32 -D_WIN32_WINNT=0x0501" >> $GITHUB_ENV
216+ echo "LDFLAGS=-L${ROOT}/usr/lib -L${HOME}/${TOOLCHAIN}/${TRIPLE}/lib" >> $GITHUB_ENV
217+ echo "PKG_CONFIG_PATH=${ROOT}/usr/lib/pkgconfig" >> $GITHUB_ENV
218+ echo "LD_LIBRARY_PATH=${ROOT}/usr/lib" >> $GITHUB_ENV
219+
220+ - name : build libplist
221+ run : |
222+ wget -q -nc -P ${DOWNLOAD_PATH} https://github.com/libimobiledevice/libplist/releases/download/${LIBPLIST_VERSION}/libplist-${LIBPLIST_VERSION}.tar.bz2
223+ tar xf ${DOWNLOAD_PATH}/libplist-${LIBPLIST_VERSION}.tar.bz2 -C ${DEP_PATH}
224+ cd ${DEP_PATH}/libplist-${LIBPLIST_VERSION}
225+ ./configure --host=${TRIPLE} --prefix=/usr --without-cython --enable-static --disable-shared
226+ make -j$(nproc)
227+ make install DESTDIR="${ROOT}"
228+
229+ - name : build libirecovery
230+ run : |
231+ wget -q -nc -P ${DOWNLOAD_PATH} https://github.com/libimobiledevice/libirecovery/releases/download/${LIBIRECOVERY_VERSION}/libirecovery-${LIBIRECOVERY_VERSION}.tar.bz2
232+ tar xf ${DOWNLOAD_PATH}/libirecovery-${LIBIRECOVERY_VERSION}.tar.bz2 -C ${DEP_PATH}
233+ cd ${DEP_PATH}/libirecovery-${LIBIRECOVERY_VERSION}
234+ wget https://gist.github.com/1Conan/2d015aad17f87f171b32ebfd9f48fb96/raw/c12fca047f8b0bba1c8983470bf863d80d7e1c1d/libirecovery.patch
235+ patch -p1 < libirecovery.patch
236+ libtoolize --force
237+ aclocal -I m4
238+ autoheader
239+ automake --add-missing
240+ autoconf
241+ ./configure --host=${TRIPLE} --prefix=/usr --enable-static --disable-shared --with-dummy
242+ make -j$(nproc)
243+ make install DESTDIR="${ROOT}"
244+
245+ - name : build zlib
246+ run : |
247+ wget -q -nc -P ${DOWNLOAD_PATH} https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz
248+ tar xf ${DOWNLOAD_PATH}/zlib-${ZLIB_VERSION}.tar.gz -C ${DEP_PATH}
249+ cd ${DEP_PATH}/zlib-${ZLIB_VERSION}
250+ ./configure --static --prefix=/usr
251+ make -j$(nproc)
252+ make install DESTDIR="${ROOT}"
253+
254+ - name : build libcurl
255+ run : |
256+ wget -q -nc -P ${DOWNLOAD_PATH} https://curl.haxx.se/download/curl-${LIBCURL_VERSION}.tar.gz
257+ tar xf ${DOWNLOAD_PATH}/curl-${LIBCURL_VERSION}.tar.gz -C ${DEP_PATH}
258+ cd ${DEP_PATH}/curl-${LIBCURL_VERSION}
259+ ./configure \
260+ --prefix=/usr \
261+ --host=${TRIPLE} \
262+ --enable-static \
263+ --disable-shared \
264+ --enable-ipv6 \
265+ --disable-dependency-tracking \
266+ --with-zlib=${ROOT}/usr \
267+ --with-winssl
268+ make -j$(nproc)
269+ make install DESTDIR="${ROOT}"
270+
271+ - name : build openssl
272+ run : |
273+ wget -nc -P ${DOWNLOAD_PATH} https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
274+ tar xf ${DOWNLOAD_PATH}/openssl-${OPENSSL_VERSION}.tar.gz -C ${DEP_PATH}
275+ cd ${DEP_PATH}/openssl-${OPENSSL_VERSION}
276+ CC= CXX= ./Configure --cross-compile-prefix=${TRIPLE}- --prefix=/usr --static -static mingw64
277+ make -j$(nproc) CC="${CC}" CXX="${CXX}"
278+ make install_sw DESTDIR="${ROOT}"
279+
280+ - name : build libzip
281+ run : |
282+ wget -q -nc -P ${DOWNLOAD_PATH} https://libzip.org/download/libzip-${LIBZIP_VERSION}.tar.gz
283+ tar xf ${DOWNLOAD_PATH}/libzip-${LIBZIP_VERSION}.tar.gz -C ${DEP_PATH}
284+ cd ${DEP_PATH}/libzip-${LIBZIP_VERSION}
285+ cmake \
286+ -DCMAKE_SYSTEM_NAME=Windows \
287+ -DCMAKE_CROSSCOMPILING=TRUE \
288+ -DBUILD_SHARED_LIBS=OFF \
289+ -DCMAKE_SHARED_LIBRARY_LINK_C_FLAGS="" \
290+ -DCMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS="" \
291+ -DCMAKE_C_FLAGS="${CFLAGS}" \
292+ -DCMAKE_CXX_FLAGS="" \
293+ -DCMAKE_EXE_LINKER_FLAGS="-static" \
294+ -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \
295+ -DENABLE_BZIP2=FALSE \
296+ -DENABLE_LZMA=FALSE \
297+ -DCMAKE_INSTALL_PREFIX=/usr \
298+ -DSKIP_BUILD_RPATH=TRUE \
299+ -DZLIB_LIBRARY=${ROOT}/usr/lib/libz.a \
300+ -DZLIB_INCLUDE_DIR=${ROOT}/usr/include
301+ make -j$(nproc)
302+ make install DESTDIR="${ROOT}"
303+
304+ - name : build libgeneral
305+ run : |
306+ rm -rf ${DEP_PATH}/libgeneral
307+ git clone https://github.com/tihmstar/libgeneral ${DEP_PATH}/libgeneral
308+ cd ${DEP_PATH}/libgeneral
309+ git checkout f571dc2949c4ca4c9b5db72fff35878717e5ce0b
310+ sed -i '/using namespace tihmstar/a \
311+ int vasprintf(char **s, const char *fmt, va_list ap) {\
312+ \n\tva_list ap2;\n\tva_copy(ap2, ap);\
313+ \n\tint l = vsnprintf(0, 0, fmt, ap2);\
314+ \n\tva_end(ap2);\n\tif (l<0 || !(*s=(char*)malloc(l+1U))) return -1;\
315+ \n\treturn vsnprintf(*s, l+1U, fmt, ap);\
316+ \n}' ${DEP_PATH}/libgeneral/libgeneral/exception.cpp
317+ ./autogen.sh --enable-static --disable-shared --host=${TRIPLE} --prefix=/usr
318+ make -j$(nproc)
319+ make install DESTDIR="${ROOT}"
320+
321+ - name : build libfragmentzip
322+ run : |
323+ rm -rf ${DEP_PATH}/libfragmentzip
324+ git clone https://github.com/tihmstar/libfragmentzip.git ${DEP_PATH}/libfragmentzip
325+ cd ${DEP_PATH}/libfragmentzip
326+ ./autogen.sh curl_LIBS="${ROOT}/usr/lib/libcurl.a" \
327+ --prefix=/usr \
328+ --host=${TRIPLE} \
329+ --enable-static \
330+ --disable-shared
331+ make -j$(nproc)
332+ make install DESTDIR="${ROOT}"
333+
334+ - name : configure
335+ run : ./autogen.sh --host=${TRIPLE} --enable-static --disable-shared
336+
337+ - name : build
338+ run : make LDFLAGS="-all-static ${LDFLAGS} -lws2_32" LIBS="-lws2_32 -lcrypt32"
339+ - uses : actions/upload-artifact@v1
340+ with :
341+ name : tsschecker_windows
342+ path : tsschecker/tsschecker.exe
343+
344+ releases :
345+ runs-on : ubuntu-latest
346+ needs : [build-linux, build-windows]
347+ steps :
348+ - uses : actions/checkout@v1
349+
350+ - name : Download linux artifact
351+ uses : actions/download-artifact@v1
352+ with :
353+ name : tsschecker_linux
354+ path : tsschecker_linux
355+ - name : Download windows artifact
356+ uses : actions/download-artifact@v1
357+ with :
358+ name : tsschecker_windows
359+ path : tsschecker_windows
360+
361+ - name : Set env vars and zip
362+ run : |
363+ echo "BUILD_VERSION_NUM=$(echo "$(git rev-list --count HEAD | tr -d '\n')")" >> $GITHUB_ENV
364+ echo "BUILD_VERSION_SHA=$(echo "$(git rev-parse HEAD | tr -d '\n'])")" >> $GITHUB_ENV
365+ echo "BUILD_VERSION_STR=$(echo "$(git rev-list --count HEAD | tr -d '\n')-$(git rev-parse HEAD | tr -d '\n'])")" >> $GITHUB_ENV
366+ echo "COMMIT_MSG=$(echo "$(git log -1 --pretty=%B)")" >> $GITHUB_ENV
367+ - name : Create Release
368+ id : create_release
369+ uses : actions/create-release@v1
370+ env :
371+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
372+ with :
373+ tag_name : ${{ env.BUILD_VERSION_NUM }}
374+ release_name : Build ${{ env.BUILD_VERSION_STR }}
375+ body : ${{ env.COMMIT_MSG }}
376+ draft : false
377+ prerelease : true
378+ - name : Upload Release Asset linux
379+ uses : actions/upload-release-asset@v1
380+ env :
381+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
382+ with :
383+ upload_url : ${{ steps.create_release.outputs.upload_url }}
384+ asset_path : ./tsschecker_linux/tsschecker
385+ asset_name : tsschecker_linux
386+ asset_content_type : application/x-pie-executable
387+ - name : Upload Release Asset windows
388+ uses : actions/upload-release-asset@v1
389+ env :
390+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
391+ with :
392+ upload_url : ${{ steps.create_release.outputs.upload_url }}
393+ asset_path : ./tsschecker_windows/tsschecker.exe
394+ asset_name : tsschecker.exe
395+ asset_content_type : application/x-msdownload
0 commit comments