-
Notifications
You must be signed in to change notification settings - Fork 15
159 lines (137 loc) · 5.12 KB
/
publish-tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
name: Publish Tests
on:
push:
branches:
- master
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
permissions:
contents: write
pages: write
id-token: write
steps:
- name: Checkout current repository
uses: actions/checkout@v4
with:
path: "current-repo"
# Cache Docker images
- name: Cache Docker images
uses: ScribeMD/[email protected]
with:
key: docker-${{ runner.os }}-${{ hashFiles('current-repo/**/*.c', 'current-repo/**/*.h') }}
- name: Set up Docker
uses: docker/setup-buildx-action@v3
- name: Pull Docker image
run: docker pull coevin/emscripten-sdl2:main
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "18"
# Get LVGL PR latest commit hash
- name: Get LVGL PR latest commit
id: lvgl-commit
run: |
COMMIT_HASH=$(curl -s https://api.github.com/repos/lvgl/lvgl/pulls/7417 | jq -r .head.sha)
echo "commit_hash=${COMMIT_HASH}" >> $GITHUB_OUTPUT
# Cache LVGL PR with commit hash in key
- name: Cache LVGL PR
id: cache-lvgl
uses: actions/cache@v3
with:
path: /tmp/runtime/lvgl
key: lvgl-pr7417-${{ steps.lvgl-commit.outputs.commit_hash }}
- name: Clone editor-online-preview repository
run: |
git clone https://github.com/lvgl-private/editor-test-preview.git /tmp/editor-preview
- name: Clone LVGL PR
if: steps.cache-lvgl.outputs.cache-hit != 'true'
run: |
# Create runtime directory
mkdir -p /tmp/runtime
# Copy resources to runtime directory
cp -r /tmp/editor-preview/resources/* /tmp/runtime/
# Clone LVGL PR
git clone https://github.com/lvgl/lvgl.git /tmp/runtime/lvgl
cd /tmp/runtime/lvgl
git fetch origin pull/7417/head:pr-7417
git checkout pr-7417
- name: Copy resources if using cached LVGL
if: steps.cache-lvgl.outputs.cache-hit == 'true'
run: |
mkdir -p /tmp/runtime
cp -r /tmp/editor-preview/resources/* /tmp/runtime/
# Cache build directory with LVGL commit hash
- name: Cache build directory
id: cache-build
uses: actions/cache@v3
with:
path: /tmp/build
key: build-${{ runner.os }}-${{ steps.lvgl-commit.outputs.commit_hash }}-${{ hashFiles('current-repo/**/*.c', 'current-repo/**/*.h') }}
- name: Prepare preview files
run: |
mkdir -p /tmp/editor-preview/project
cp -r current-repo/* /tmp/editor-preview/project/
- name: Generate manifest file
run: |
cd /tmp/editor-preview
node generateProjectManifest.js ./project/ /project/
- name: Prepare widget list
id: widget-list
run: |
WIDGET_LIST="[]"
if [ -d "current-repo/widgets" ]; then
# Find directories in widgets that contain .c files
WIDGETS=$(find current-repo/widgets -type f -name "*.c" -exec dirname {} \; | sort -u | xargs -n1 basename)
if [ ! -z "$WIDGETS" ]; then
# Convert to array of '_widgetname_register'
WIDGET_LIST="[$(echo "$WIDGETS" | tr ' ' '\n' | sed "s/.*/'_&_register'/" | tr '\n' ',' | sed 's/,$//' )]"
fi
fi
echo "widget_functions=$WIDGET_LIST" >> $GITHUB_OUTPUT
# Cache LVGL library
- name: Cache LVGL library
id: cache-lvgl-lib
uses: actions/cache@v3
with:
path: /tmp/runtime/lib/liblvgl.a
key: lvgl-lib-${{ steps.lvgl-commit.outputs.commit_hash }}
- name: Build LVGL library
if: steps.cache-lvgl-lib.outputs.cache-hit != 'true'
run: |
docker run --rm \
-v /tmp/runtime:/work \
-w /work/lib \
coevin/emscripten-sdl2:main \
sh -c 'mkdir -p /tmp/build && \
cd /tmp/build && \
emcmake cmake /work/lib && \
emmake make -j8 && \
cp liblvgl.a /work/lib/'
- name: Build runtime
run: |
# Create build directory
mkdir -p /tmp/build
# Run CMake in Docker
docker run --rm \
-v /tmp/runtime:/work \
-v /tmp/editor-preview/project/resources:/output \
-v /tmp/build:/build \
-v ${{ github.workspace }}/current-repo:/user_src \
-w /build \
coevin/emscripten-sdl2:main \
sh -c 'emcmake cmake -DPROJECT_NAME=lved-runtime \
-DOUTPUT_DIR=/output \
-DLVGL_SRC_DIR=/work/lvgl \
-DLVGL_CONF_DIR=/work/conf \
-DUSER_SRC_DIR=/user_src \
-DADDITIONAL_EXPORTED_FUNCTIONS="${{ steps.widget-list.outputs.widget_functions }}" \
/work && \
emmake make -j8'
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: /tmp/editor-preview
- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4