Skip to content

Commit cf573df

Browse files
committed
add github ci
1 parent 1044000 commit cf573df

File tree

1 file changed

+395
-0
lines changed

1 file changed

+395
-0
lines changed

.github/workflows/build.yml

Lines changed: 395 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,395 @@
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

Comments
 (0)