-
Notifications
You must be signed in to change notification settings - Fork 3
274 lines (226 loc) · 10.6 KB
/
installer.yml
File metadata and controls
274 lines (226 loc) · 10.6 KB
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
name: Build Installer
on:
push:
branches:
- "**"
pull_request:
branches:
- "**"
jobs:
build-installer:
timeout-minutes: 80
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, ubuntu-24.04, windows-2022, macos-14]
steps:
- name: Check-out repository
uses: actions/checkout@v4
- name: Set up Python environment
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Upgrade package installer for Python
run: python -m pip install --upgrade pip
- name: Install needed libraries (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xfixes0 libxcb-shape0 libxcb-cursor0
sudo apt-get install libcairo2-dev pkg-config
- name: Install Python dependences
run: |
python -m pip install flit
flit install --only-deps # Install the dependencies, but not the EasyReflectometryApp package itself
- name: Add extra info to pyproject.toml
run: python utils.py --update
- name: Declare env variables on push only
if: github.event_name == 'push'
shell: bash
run: echo "BRANCH_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Declare env variables on pull_request only
if: github.event_name == 'pull_request'
shell: bash
run: echo "BRANCH_NAME=$GITHUB_HEAD_REF" >> $GITHUB_ENV
- name: Declare env variables on push and pull_request
shell: bash
run: |
echo "MATRIX_OS=${{ matrix.os }}" >> $GITHUB_ENV
echo "RUNNER_OS=${{ runner.os }}" >> $GITHUB_ENV
echo "RUNNER_ARCH=${{ runner.arch }}" >> $GITHUB_ENV
echo "TEMP_ARTIFACT_SUFFIX=$(python utils.py --get release.app_name)" >> $GITHUB_ENV
echo "APP_NAME=$(python utils.py --get release.app_name)" >> $GITHUB_ENV
echo "PACKAGE_NAME=$(python utils.py --get project.name)" >> $GITHUB_ENV
echo "PACKAGE_PATH=$GITHUB_WORKSPACE/$(python utils.py --get project.name)" >> $GITHUB_ENV
echo "PACKAGE_VERSION=$(python utils.py --get project.version)" >> $GITHUB_ENV
echo "RELEASE_TAG=$(python utils.py --get ci.app.info.release_tag)" >> $GITHUB_ENV
echo "RELEASE_TITLE=$(python utils.py --get ci.app.info.release_title)" >> $GITHUB_ENV
echo "SCRIPTS_PATH=$(python utils.py --get ci.project.subdirs.scripts)" >> $GITHUB_ENV
echo "DISTRIBUTION_PATH=$(python utils.py --get ci.project.subdirs.distribution)" >> $GITHUB_ENV
echo "DOWNLOAD_PATH=$(python utils.py --get ci.project.subdirs.download)" >> $GITHUB_ENV
echo "QTIFW_PATH=$(python utils.py --get ci.qtifw.setup.installation_path.${{ runner.os }})" >> $GITHUB_ENV
echo "PYTHON_PACKAGES_PATH=$(python utils.py --get ci.cache.python_packages_path)" >> $GITHUB_ENV
echo "GIT_INSTALL_URL=git+$GITHUB_SERVER_URL/$GITHUB_REPOSITORY@${{ env.BRANCH_NAME }}" >> $GITHUB_ENV
- name: Declare dependent env variables on push and pull_request
shell: bash
run: |
echo "SETUP_EXE_PATH=$(python ${{ env.SCRIPTS_PATH }}/Config.py ${{ env.BRANCH_NAME }} ${{ matrix.os }} setup_exe_path)" >> $GITHUB_ENV
# - name: Install needed libraries (Linux)
# if: runner.os == 'Linux'
# run: |
# sudo apt-get update
# sudo apt-get install libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xfixes0 libxcb-shape0 libxcb-cursor0
# sudo apt-get install libcairo2-dev pkg-config
# - name: Run app in testmode and quit
# shell: bash
# run: |
# cd ..
# git clone --single-branch --branch get-rid-of-qt5compat https://github.com/easyscience/EasyApp.git
# cd EasyReflectometryApp
# python EasyReflectometryApp/main.py --testmode
- name: Create freezed python app bundle with PyInstaller
run: python ${{ env.SCRIPTS_PATH }}/FreezeApp.py
- name: Create offline app installer from freezed app bundle with QtIFW
run: >
python ${{ env.SCRIPTS_PATH }}/MakeInstaller.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
# - name: Sign, notarize and staple offline app installer (macOS)
# if: |
# runner.os == 'macOS' && github.event_name == 'push' &&
# (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'develop')
# run: >
# python ${{ env.SCRIPTS_PATH }}/SignAppInstaller.py
# ${{ env.BRANCH_NAME }} ${{ matrix.os }}
# ${{ secrets.APPLE_CERT_DATA }} ${{ secrets.APPLE_CERT_PASSWORD }}
# ${{ secrets.APPLE_NOTARY_USER }} ${{ secrets.APPLE_NOTARY_PASSWORD }}
# - name: Install DigiCert Client tools from Github Custom Actions marketplace
# if: |
# runner.os == 'windows' && github.event_name == 'push'
# uses: digicert/ssm-code-signing@v1.0.1
# - name: Set up P12 certificate
# if: |
# runner.os == 'windows' && github.event_name == 'push'
# run: |
# echo "${{ secrets.WINDOWS_CERT_DATA }}" | base64 --decode > /d/Certificate_pkcs12.p12
# shell: bash
# - name: Set keylocker variables
# if: |
# runner.os == 'windows' && github.event_name == 'push'
# id: variables
# run: |
# echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
# echo "SM_HOST=${{ secrets.KEYLOCKER_HOST }}" >> "$GITHUB_ENV"
# echo "SM_API_KEY=${{ secrets.KEYLOCKER_API_KEY }}" >> "$GITHUB_ENV"
# echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV"
# echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.WINDOWS_CERT_PASSWORD }}" >> "$GITHUB_ENV"
# shell: bash
# - name: Sign the binary using keypair alias
# if: |
# runner.os == 'windows' && github.event_name == 'push' && env.BRANCH_NAME == 'master'
# run: |
# smctl sign --keypair-alias key_911959544 --input ${{ env.SETUP_EXE_PATH }}
# shell: cmd
- name: Create zip archive of offline app installer for distribution
run: >
python ${{ env.SCRIPTS_PATH }}/ZipAppInstaller.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
- name: Upload double-zipped offline app installer for the next job step
uses: actions/upload-artifact@v4
with:
name: zipped-app-installer_${{ matrix.os }}-${{ runner.arch }} # zip of another zip
path: ${{ env.DISTRIBUTION_PATH }}/*.zip
compression-level: 0 # no compression
if-no-files-found: error
retention-days: 10
- name: Upload zipped offline app installer to GitHub releases (non-master branch)
if: github.event_name == 'push' && env.BRANCH_NAME != 'master'
uses: ncipollo/release-action@v1
with:
draft: true
prerelease: true
allowUpdates: true
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: "${{ env.DISTRIBUTION_PATH }}/*.zip"
tag: ${{ env.BRANCH_NAME }}
name: ${{ env.BRANCH_NAME }}
bodyFile: "RELEASE.md"
- name: Upload zipped offline app installer to GitHub releases (master branch)
if: github.event_name == 'push' && env.BRANCH_NAME == 'master'
uses: ncipollo/release-action@v1
with:
draft: true
prerelease: true
allowUpdates: true
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: "${{ env.DISTRIBUTION_PATH }}/*.zip"
tag: ${{ env.RELEASE_TAG }}
name: ${{ env.RELEASE_TITLE }}
bodyFile: "RELEASE.md"
test-installer:
needs: build-installer
timeout-minutes: 15
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, ubuntu-24.04, windows-2022, macos-14]
steps:
- name: Check-out repository
uses: actions/checkout@v4
- name: Set up Python environment
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Upgrade package installer for Python
run: python -m pip install --upgrade pip
- name: Install Python dependences
run: |
python -m pip install toml
python -m pip install requests
- name: Declare env variables on push only
if: github.event_name == 'push'
shell: bash
run: echo "BRANCH_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Declare env variables on pull_request only
if: github.event_name == 'pull_request'
shell: bash
run: echo "BRANCH_NAME=$GITHUB_HEAD_REF" >> $GITHUB_ENV
- name: Add extra info to pyproject.toml
run: python utils.py --update
- name: Declare env variables on push and pull_request
shell: bash
run: |
echo "SCRIPTS_PATH=$(python utils.py --get ci.project.subdirs.scripts)" >> $GITHUB_ENV
- name: Set up screen (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xfixes0 libxcb-shape0 libxcb-cursor0
sudo apt-get install libpulse-mainloop-glib0
sudo apt-get install libxkbcommon-x11-0
sudo apt-get install libegl1-mesa-dev
Xvfb :0 -screen 0 1920x1080x24 -ac &
echo "DISPLAY=:0" >> $GITHUB_ENV
- name: Download zipped offline app installer from from the previous job step
uses: actions/download-artifact@v4
with:
name: zipped-app-installer_${{ matrix.os }}-${{ runner.arch }} # zip of another zip
- name: Unzip archive with offline app installer for distribution
run: >
python ${{ env.SCRIPTS_PATH }}/UnzipAppInstaller.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
- name: Make dir for .desktop file (Linux)
if: runner.os == 'Linux'
run: mkdir -p ~/.local/share/applications/
- name: Install app
run: >
python ${{ env.SCRIPTS_PATH }}/InstallApp.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
- name: Check app installation is done
run: python ${{ env.SCRIPTS_PATH }}/CheckAppExists.py
- name: Run app in testmode and quit (macOS & Linux)
if: runner.os != 'Windows' # disabled because it can't exit app and one can't see what is going on there (no GitHub logging)...
run: python ${{ env.SCRIPTS_PATH }}/RunApp.py --testmode