Skip to content

Commit 063786c

Browse files
authored
[FEATURE] Add AppImage build variants and CI workflow (#1348)
2 parents 5bad373 + b88d1eb commit 063786c

File tree

2 files changed

+374
-50
lines changed

2 files changed

+374
-50
lines changed
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
name: Build Linux AppImage
2+
3+
on:
4+
# Build on releases
5+
release:
6+
types: [published]
7+
# Allow manual trigger
8+
workflow_dispatch:
9+
inputs:
10+
build_type:
11+
description: 'Build type (all, minimal, ocr, hardsubx)'
12+
required: false
13+
default: 'all'
14+
# Build on pushes to workflow file for testing
15+
push:
16+
paths:
17+
- '.github/workflows/build_appimage.yml'
18+
- 'linux/build_appimage.sh'
19+
20+
jobs:
21+
build-appimage:
22+
runs-on: ubuntu-22.04
23+
strategy:
24+
fail-fast: false
25+
matrix:
26+
build_type: [minimal, ocr, hardsubx]
27+
28+
steps:
29+
- name: Check if should build this variant
30+
id: should_build
31+
run: |
32+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
33+
INPUT_TYPE="${{ github.event.inputs.build_type }}"
34+
if [ "$INPUT_TYPE" = "all" ] || [ "$INPUT_TYPE" = "${{ matrix.build_type }}" ]; then
35+
echo "should_build=true" >> $GITHUB_OUTPUT
36+
else
37+
echo "should_build=false" >> $GITHUB_OUTPUT
38+
fi
39+
else
40+
echo "should_build=true" >> $GITHUB_OUTPUT
41+
fi
42+
43+
- name: Checkout repository
44+
if: steps.should_build.outputs.should_build == 'true'
45+
uses: actions/checkout@v4
46+
47+
- name: Install base dependencies
48+
if: steps.should_build.outputs.should_build == 'true'
49+
run: |
50+
sudo apt-get update
51+
sudo apt-get install -y --no-install-recommends \
52+
build-essential \
53+
cmake \
54+
pkg-config \
55+
wget \
56+
file \
57+
libfuse2 \
58+
zlib1g-dev \
59+
libpng-dev \
60+
libjpeg-dev \
61+
libfreetype-dev \
62+
libxml2-dev \
63+
libcurl4-gnutls-dev \
64+
libssl-dev \
65+
clang \
66+
libclang-dev
67+
68+
- name: Install OCR dependencies
69+
if: steps.should_build.outputs.should_build == 'true' && (matrix.build_type == 'ocr' || matrix.build_type == 'hardsubx')
70+
run: |
71+
sudo apt-get install -y --no-install-recommends \
72+
tesseract-ocr \
73+
libtesseract-dev \
74+
libleptonica-dev \
75+
tesseract-ocr-eng
76+
77+
- name: Install FFmpeg dependencies (HardSubX)
78+
if: steps.should_build.outputs.should_build == 'true' && matrix.build_type == 'hardsubx'
79+
run: |
80+
sudo apt-get install -y --no-install-recommends \
81+
libavcodec-dev \
82+
libavformat-dev \
83+
libavutil-dev \
84+
libswscale-dev \
85+
libswresample-dev \
86+
libavfilter-dev \
87+
libavdevice-dev
88+
89+
- name: Install Rust toolchain
90+
if: steps.should_build.outputs.should_build == 'true'
91+
uses: dtolnay/rust-toolchain@stable
92+
93+
- name: Cache GPAC build
94+
if: steps.should_build.outputs.should_build == 'true'
95+
id: cache-gpac
96+
uses: actions/cache@v4
97+
with:
98+
path: /usr/local/lib/libgpac*
99+
key: gpac-v2.4.0-ubuntu22
100+
101+
- name: Build and install GPAC
102+
if: steps.should_build.outputs.should_build == 'true' && steps.cache-gpac.outputs.cache-hit != 'true'
103+
run: |
104+
git clone -b v2.4.0 --depth 1 https://github.com/gpac/gpac
105+
cd gpac
106+
./configure
107+
make -j$(nproc) lib
108+
sudo make install-lib
109+
sudo ldconfig
110+
111+
- name: Update library cache
112+
if: steps.should_build.outputs.should_build == 'true'
113+
run: sudo ldconfig
114+
115+
- name: Build AppImage
116+
if: steps.should_build.outputs.should_build == 'true'
117+
run: |
118+
cd linux
119+
chmod +x build_appimage.sh
120+
BUILD_TYPE=${{ matrix.build_type }} ./build_appimage.sh
121+
122+
- name: Get AppImage name
123+
if: steps.should_build.outputs.should_build == 'true'
124+
id: appimage_name
125+
run: |
126+
case "${{ matrix.build_type }}" in
127+
minimal)
128+
echo "name=ccextractor-minimal-x86_64.AppImage" >> $GITHUB_OUTPUT
129+
;;
130+
ocr)
131+
echo "name=ccextractor-x86_64.AppImage" >> $GITHUB_OUTPUT
132+
;;
133+
hardsubx)
134+
echo "name=ccextractor-hardsubx-x86_64.AppImage" >> $GITHUB_OUTPUT
135+
;;
136+
esac
137+
138+
- name: Test AppImage
139+
if: steps.should_build.outputs.should_build == 'true'
140+
run: |
141+
chmod +x linux/${{ steps.appimage_name.outputs.name }}
142+
linux/${{ steps.appimage_name.outputs.name }} --version
143+
144+
- name: Upload AppImage artifact
145+
if: steps.should_build.outputs.should_build == 'true'
146+
uses: actions/upload-artifact@v4
147+
with:
148+
name: ${{ steps.appimage_name.outputs.name }}
149+
path: linux/${{ steps.appimage_name.outputs.name }}
150+
151+
- name: Upload to Release
152+
if: steps.should_build.outputs.should_build == 'true' && github.event_name == 'release'
153+
uses: softprops/action-gh-release@v1
154+
with:
155+
files: linux/${{ steps.appimage_name.outputs.name }}
156+
env:
157+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)