1
1
stages :
2
2
- build
3
- - bundle
4
-
5
- .win_build_template : &win_build_definition
6
- stage : build
7
- script :
8
- - if not exist "build" mkdir build
9
- - if not exist "ide" mkdir ide
10
- - cd build
11
- - echo set -x; export PATH=`cygpath -u %QTDIR%/bin`:$PATH; qmake "CONFIG+=bundled" "DEFINES+=MINIZINC_IDE_BUILD=\\\\\\\"\"${CI_PIPELINE_ID}\\\\\\\"\"" ../MiniZincIDE/MiniZincIDE.pro; nmake; cp release/MiniZincIDE.exe ../ide; cd ../ide; windeployqt --no-translations --no-compiler-runtime --no-system-d3d-compiler MiniZincIDE.exe > build.sh
12
- - d2u build.sh
13
- - bash build.sh
14
- artifacts :
15
- paths :
16
- - ide/
3
+ - package
17
4
5
+ # ----------- Build MiniZincIDE -----------
18
6
19
7
build:linux :
20
8
stage : build
@@ -26,65 +14,269 @@ build:linux:
26
14
- make -j4 INSTALL_ROOT=../ide install; find ../ide/
27
15
- cd ..
28
16
- linuxdeployqt ide/usr/bin/MiniZincIDE -bundle-non-qt-libs -no-translations -no-copy-copyright-files
29
- tags :
30
- - linux
31
- - docker
17
+ # Workaround for: https://github.com/probonopd/linuxdeployqt/issues/35
18
+ - " repoquery -l nss-softokn | grep lib64 | grep '.so \\ |.chk' | xargs -i cp -R {} ./ide/usr/lib/ "
19
+ tags : [linux, docker]
32
20
artifacts :
33
- paths :
34
- - ide/
35
- cache :
36
- key : " linux_$CI_COMMIT_REF_SLUG"
37
- paths :
38
- - build/
21
+ paths : [ide/]
39
22
40
23
build:osx :
41
24
stage : build
42
- variables :
43
- QTDIR : " $OSXQTDIR"
44
25
script :
45
- - export PATH="$QTDIR/bin:$PATH"
46
26
- mkdir -p build; cd build
47
27
- qmake -makefile "CONFIG+=bundled" "DEFINES+=MINIZINC_IDE_BUILD=\\\\\\\"\"${CI_PIPELINE_ID}\\\\\\\"\"" ../MiniZincIDE/MiniZincIDE.pro
48
28
- make -j4
49
29
- cp -r MiniZincIDE.app ..
50
- tags :
51
- - osx
52
- - cpp
53
- - qt
30
+ tags : [osx, cpp, qt]
54
31
artifacts :
55
- paths :
56
- - MiniZincIDE.app
57
- cache :
58
- key : " osx_$CI_COMMIT_REF_SLUG"
59
- paths :
60
- - build/
32
+ paths : [MiniZincIDE.app]
61
33
62
- .build:win32 : # DISABLED
63
- << : *win_build_definition
64
- variables :
65
- QTDIR : " $WINQTDIR"
34
+ build:win64 :
35
+ stage : build
36
+ script :
37
+ - if not exist "build" mkdir build
38
+ - if not exist "ide" mkdir ide
39
+ - cd build
40
+ - qmake "CONFIG+=bundled" "DEFINES+=MINIZINC_IDE_BUILD=\\\\\\\"\"%CI_PIPELINE_ID%\\\\\\\"\"" ../MiniZincIDE/MiniZincIDE.pro
41
+ - nmake
42
+ - cp release/MiniZincIDE.exe ../ide
43
+ - cd ../ide
44
+ - windeployqt --no-translations --no-compiler-runtime --no-system-d3d-compiler MiniZincIDE.exe
45
+ tags : [win64, cpp, qt]
46
+ artifacts :
47
+ paths : [ide/]
48
+
49
+ # ----------- MiniZinc Packaging -----------
50
+ .packaging_setup : &packaging_setup
66
51
before_script :
67
- - call "C:\Program Files (x86)\Microsoft Visual Studio 14.0/VC/vcvarsall.bat"
68
- tags :
69
- - win32
70
- - cpp
71
- - qt
72
- cache :
73
- key : " win32_$CI_COMMIT_REF_SLUG"
74
- paths :
75
- - build/
52
+ # ## Set the MZNVERSION variable
53
+ - " if [ -n \" $CI_COMMIT_TAG\" ]; then MZNVERSION=\" $CI_COMMIT_TAG\" ; else MZNVERSION=\" build$CI_PIPELINE_ID\" ; fi"
54
+ # ## Choose the MiniZinc compiler branch
55
+ - " if [ -n \" $CI_COMMIT_TAG\" ]; then MZNREF=\" $CI_COMMIT_TAG\" ; elif [ \" $CI_COMMIT_REF_NAME\" = \" master\" ]; then MZNREF=\" master\" ; else MZNREF=\" develop\" ; fi"
56
+ # ## Download Dependencies
57
+ - curl --silent -o minizinc.zip --location --header "PRIVATE-TOKEN:$ACCESS_TOKEN" "https://gitlab.com/api/v4/projects/minizinc%2Fminizinc/jobs/artifacts/$MZNREF/download?job=build:$MZNARCH"
58
+ - unzip -q minizinc.zip
59
+ - " [ ${DOWNLOAD_SOLVERS:-1} -eq 1 ] && curl --silent -o vendor.zip --location --header \" PRIVATE-TOKEN:$ACCESS_TOKEN\" \" https://gitlab.com/api/v4/projects/minizinc%2Fvendor/jobs/artifacts/master/download?job=bundle:$MZNARCH\" && unzip -q vendor.zip"
60
+ - " [ ${DOWNLOAD_GLOBALIZER:-0} -eq 1 ] && curl --silent -o globalizer.zip --location --header \" PRIVATE-TOKEN:$ACCESS_TOKEN\" \" https://gitlab.com/api/v4/projects/minizinc%2FGlobalizer/jobs/artifacts/master/download?job=build:$MZNARCH\" && unzip -q globalizer.zip"
61
+ - " [ ${DOWNLOAD_FINDMUS:-0} -eq 1 ] && curl --silent -o findmus.zip --location --header \" PRIVATE-TOKEN:$ACCESS_TOKEN\" \" https://gitlab.com/api/v4/projects/minizinc%2FFindMUS/jobs/artifacts/master/download?job=build:$MZNARCH\" && unzip -q findmus.zip"
76
62
77
- build:win64 :
78
- << : *win_build_definition
63
+ package:linux :
64
+ stage : package
65
+ image : dekker1/minibuild:package
66
+ variables :
67
+ MZNARCH : " linux"
68
+ DOWNLOAD_GLOBALIZER : 1
69
+ DOWNLOAD_FINDMUS : 1
70
+ << : *packaging_setup
71
+ script :
72
+ - PACKAGE=MiniZincIDE-${MZNVERSION}-bundle-linux
73
+ - mkdir -p $PACKAGE/
74
+ # ## Package IDE
75
+ - mv ide/usr/* $PACKAGE/
76
+ - cp resources/scripts/MiniZincIDE.sh $PACKAGE/
77
+ # ## Package MiniZinc
78
+ - mv minizinc/bin/* $PACKAGE/bin/
79
+ - mv minizinc/share $PACKAGE/share
80
+ # ## Package vendor solvers
81
+ - mv vendor/gecode/bin/fzn-gecode $PACKAGE/bin/
82
+ - mv vendor/gecode/share/gecode/mznlib $PACKAGE/share/minizinc/gecode
83
+ - mv vendor/chuffed/bin/fzn-chuffed $PACKAGE/bin/
84
+ - mv vendor/chuffed/share/chuffed/mznlib $PACKAGE/share/minizinc/chuffed
85
+ # ## Package Globalizer
86
+ - mv globalizer/bin/minizinc-globalizer $PACKAGE/bin/
87
+ - mv globalizer/share/globalizer/mznlib $PACKAGE/share/minizinc/globalizer
88
+ # ## Package findMUS
89
+ - mv findMUS/bin/findMUS $PACKAGE/bin/
90
+ # ## Package solver scripts
91
+ - cp resources/scripts/fzn-gecode-gist $PACKAGE/bin/
92
+ # ## Package default settings
93
+ - mkdir -p $PACKAGE/share/minizinc/solvers/
94
+ - cp resources/solvers/*.msc $PACKAGE/share/minizinc/solvers/
95
+ - cp resources/Preferences.json $PACKAGE/share/minizinc/
96
+ # ## Strip included binaries
97
+ - (cd $PACKAGE/bin; strip minizinc fzn-gecode fzn-chuffed findMUS minizinc-globalizer mzn2doc)
98
+ - cp resources/misc/README $PACKAGE
99
+ # ## Compress package
100
+ - tar -czf $PACKAGE.tgz $PACKAGE
101
+ # ## Generate checksum
102
+ - sha256sum $PACKAGE.tgz > $PACKAGE.sha256
103
+ artifacts :
104
+ name : " minizinc_bundle_linux_${CI_PIPELINE_ID}"
105
+ paths : [MiniZincIDE*.tgz, MiniZincIDE*.sha256]
106
+ dependencies : ["build:linux"]
107
+ tags : [linux, docker]
108
+
109
+ package:osx :
110
+ stage : package
111
+ variables :
112
+ MZNARCH : " osx"
113
+ DOWNLOAD_GLOBALIZER : 1
114
+ DOWNLOAD_FINDMUS : 1
115
+ << : *packaging_setup
116
+ script :
117
+ - " DIR=MiniZincIDE.app/Contents/Resources; MZNDIR=$DIR/share/minizinc"
118
+ - mkdir -p $MZNDIR/solvers
119
+ # ## Package MiniZinc
120
+ - mv minizinc/bin/* $DIR/
121
+ - mv minizinc/share/minizinc/* $MZNDIR/
122
+ # ## Package vendor solvers
123
+ - mkdir -p $DIR/bin/
124
+ - mv vendor/gecode/bin/fzn-gecode $DIR/bin/
125
+ - (cd $DIR; ln -s gecode/fzn-gecode)
126
+ - mv vendor/gecode/share/gecode/mznlib $MZNDIR/gecode
127
+ - mv vendor/chuffed/bin/fzn-chuffed $DIR/bin/
128
+ - mv vendor/chuffed/share/chuffed/mznlib $MZNDIR/chuffed
129
+ # ## Package Globalizer
130
+ - mv globalizer/bin/minizinc-globalizer $DIR/bin/
131
+ - mv globalizer/share/globalizer/mznlib $MZNDIR/globalizer
132
+ # ## Package findMUS
133
+ - mv findMUS/bin/findMUS $DIR/bin/
134
+ # ## Package solver scripts
135
+ - cp resources/scripts/fzn-gecode-gist $DIR/bin/
136
+ # ## Package default settings
137
+ - cp resources/solvers/*.msc $MZNDIR/solvers
138
+ - cp resources/Preferences.json $MZNDIR/
139
+ # ## Run automated Qt deployment tool
140
+ - macdeployqt ./MiniZincIDE.app -executable=$DIR/bin/fzn-gecode
141
+ artifacts :
142
+ name : " minizinc_bundle_mac_${CI_PIPELINE_ID}"
143
+ paths : [MiniZincIDE.app]
144
+ dependencies : ["build:osx"]
145
+ tags : [osx, qt]
146
+
147
+ package:win64 :
148
+ stage : package
79
149
variables :
80
- QTDIR : " $WINQTDIR"
150
+ MZNARCH : " win64"
151
+ MSVCREDIST : " C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Redist/MSVC/14.16.27012/x64/Microsoft.VC141.CRT"
152
+ UCRTREDIST : " C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/x64"
153
+ ISSARCH : " x64"
154
+ ISSARCHALLOWED : " x64"
81
155
before_script :
82
- - call "C:\Program Files (x86)\Microsoft Visual Studio 14.0/VC/vcvarsall.bat" amd64
83
- tags :
84
- - win64
85
- - cpp
86
- - qt
87
- cache :
88
- key : " win64_$CI_COMMIT_REF_SLUG"
89
- paths :
90
- - build/
156
+ # ## Set the MZNVERSION variable
157
+ - if defined CI_COMMIT_TAG (set MZNVERSION=%CI_COMMIT_TAG%) else (set MZNVERSION=%CI_PIPELINE_ID%)
158
+ # ## Choose the MiniZinc compiler branch
159
+ - if defined CI_COMMIT_TAG (set MZNREF=%CI_COMMIT_TAG%) else if %CI_COMMIT_REF_NAME%==master (set MZNREF=master) else (set MZNREF=develop)
160
+ # ## Download Dependencies
161
+ - curl --silent -o minizinc.zip --location --header "PRIVATE-TOKEN:%ACCESS_TOKEN%" "https://gitlab.com/api/v4/projects/minizinc%%2Fminizinc/jobs/artifacts/%MZNREF%/download?job=build:%MZNARCH%"
162
+ - unzip -q minizinc.zip
163
+ - curl --silent -o vendor.zip --location --header "PRIVATE-TOKEN:%ACCESS_TOKEN%" "https://gitlab.com/api/v4/projects/minizinc%%2Fvendor/jobs/artifacts/master/download?job=bundle:%MZNARCH%"
164
+ - unzip -q vendor.zip
165
+ - curl --silent -o globalizer.zip --location --header "PRIVATE-TOKEN:%ACCESS_TOKEN%" "https://gitlab.com/api/v4/projects/minizinc%%2Fglobalizer/jobs/artifacts/master/download?job=build:%MZNARCH%"
166
+ - unzip -q globalizer.zip
167
+ - curl --silent -o findmus.zip --location --header "PRIVATE-TOKEN:%ACCESS_TOKEN%" "https://gitlab.com/api/v4/projects/minizinc%%2FFindMus/jobs/artifacts/master/download?job=build:%MZNARCH%"
168
+ - unzip -q findmus.zip
169
+ script :
170
+ - " \" C:/Program Files (x86)/Inno Setup 5/ISCC.exe\" /dMyAppVersion=\" %MZNVERSION%\" /dMyMZNVersion=\" %MZNVERSION%\" /dMyAppDirectory=\" %CI_PROJECT_DIR%\" /dMyMSVCRedist=\" %MSVCREDIST%\" /dMyUCRTRedist=\" %UCRTREDIST%\" /dMyAPPArch=\" %MZNARCH%\" /dMyApp64Bit=\" %ISSARCH%\" /dMyAppArchitectures=\" %ISSARCHALLOWED%\" /O\" %CI_PROJECT_DIR%\" resources/pkg_config/minizinc-bundle.iss"
171
+ # ## Generate checksum
172
+ - certutil -hashfile MiniZincIDE-%MZNVERSION%-bundled-setup-%MZNARCH%.exe SHA256 > MiniZincIDE-%MZNVERSION%-bundled-setup-%MZNARCH%.sha256
173
+ artifacts :
174
+ name : " minizinc_bundle_windows_%CI_PIPELINE_ID%"
175
+ paths : [MiniZincIDE*.exe, MiniZincIDE*.sha256]
176
+ dependencies : ["build:win64"]
177
+ tags : [win64]
178
+
179
+ package:appimage :
180
+ stage : package
181
+ image : dekker1/minibuild:appimage
182
+ variables :
183
+ MZNARCH : " linux"
184
+ DOWNLOAD_GLOBALIZER : 1
185
+ DOWNLOAD_FINDMUS : 1
186
+ PACKAGE : " MiniZinc.AppDir"
187
+ << : *packaging_setup
188
+ script :
189
+ - mkdir -p $PACKAGE/usr/
190
+ # ## Package IDE
191
+ - mv ide/usr/* $PACKAGE/usr/
192
+ # ## Package MiniZinc
193
+ - mv minizinc/bin/* $PACKAGE/usr/bin/
194
+ - mv minizinc/share $PACKAGE/usr/share
195
+ # ## Package vendor solvers
196
+ - mv vendor/gecode/bin/fzn-gecode $PACKAGE/usr/bin/
197
+ - mv vendor/gecode/share/gecode/mznlib $PACKAGE/usr/share/minizinc/gecode
198
+ - mv vendor/chuffed/bin/fzn-chuffed $PACKAGE/usr/bin/
199
+ - mv vendor/chuffed/share/chuffed/mznlib $PACKAGE/usr/share/minizinc/chuffed
200
+ # ## Package Globalizer
201
+ - mv globalizer/bin/minizinc-globalizer $PACKAGE/usr/bin/
202
+ - mv globalizer/share/globalizer/mznlib $PACKAGE/usr/share/minizinc/globalizer
203
+ # ## Package findMUS
204
+ - mv findMUS/bin/findMUS $PACKAGE/usr/bin/
205
+ # ## Package solver scripts
206
+ - cp resources/scripts/fzn-gecode-gist $PACKAGE/usr/bin/
207
+ # ## Package default settings
208
+ - mkdir -p $PACKAGE/usr/share/minizinc/solvers/
209
+ - cp resources/solvers/*.msc $PACKAGE/usr/share/minizinc/solvers/
210
+ - cp resources/Preferences.json $PACKAGE/usr/share/minizinc/
211
+ # ## Strip included binaries
212
+ - (cd $PACKAGE/usr/bin; strip minizinc fzn-gecode fzn-chuffed findMUS minizinc-globalizer mzn2doc)
213
+ - cp resources/misc/README $PACKAGE
214
+ # ## Assemble AppImage
215
+ - cp resources/scripts/AppRun $PACKAGE
216
+ - cp resources/misc/minizinc.desktop $PACKAGE/minizinc.desktop
217
+ - cp resources/icon.png $PACKAGE/minizinc.png
218
+ - ARCH=x86_64 appimagetool $PACKAGE MiniZincIDE-${MZNVERSION}-x86_64.AppImage
219
+ # ## Generate checksum
220
+ - sha256sum MiniZincIDE*.AppImage > MiniZincIDE-${MZNVERSION}-x86_64.sha256
221
+ artifacts :
222
+ name : " minizinc_appimage_${CI_PIPELINE_ID}"
223
+ paths : [MiniZincIDE*.AppImage, MiniZincIDE*.sha256]
224
+ dependencies : ["build:linux"]
225
+ tags : [linux, docker]
226
+
227
+ package:docker_alpine :
228
+ stage : package
229
+ variables :
230
+ MZNARCH : " musl"
231
+ << : *packaging_setup
232
+ script :
233
+ - docker build -f resources/pkg_config/alpine.Dockerfile -t minizinc_alpine .
234
+ - if [ -n "$CI_COMMIT_TAG" ]; then docker tag minizinc_alpine minizinc/minizinc:$CI_COMMIT_TAG && docker push minizinc/minizinc:$CI_COMMIT_TAG; fi
235
+ - if [ "$CI_COMMIT_REF_NAME" = "master" ]; then docker tag minizinc_alpine minizinc/minizinc:latest && docker push minizinc/minizinc:latest; fi
236
+ - if [ "$CI_COMMIT_REF_NAME" = "develop" ]; then docker tag minizinc_alpine minizinc/minizinc:edge && docker push minizinc/minizinc:edge; fi
237
+ dependencies : []
238
+ only : [tags, master, develop]
239
+ tags : [docker-cli]
240
+
241
+ package:docker_ubuntu :
242
+ stage : package
243
+ variables :
244
+ MZNARCH : " linux"
245
+ DOWNLOAD_SOLVERS : 0
246
+ << : *packaging_setup
247
+ script :
248
+ - curl --silent -o gecode.zip --location --header "PRIVATE-TOKEN:$ACCESS_TOKEN" "https://gitlab.com/api/v4/projects/minizinc%2Fvendor/jobs/artifacts/master/download?job=gecode:$MZNARCH"
249
+ - unzip -q gecode.zip
250
+ - curl --silent -o chuffed.zip --location --header "PRIVATE-TOKEN:$ACCESS_TOKEN" "https://gitlab.com/api/v4/projects/minizinc%2Fvendor/jobs/artifacts/master/download?job=chuffed:$MZNARCH"
251
+ - unzip -q chuffed.zip
252
+ - docker build -f resources/pkg_config/ubuntu.Dockerfile -t minizinc_ubuntu .
253
+ - if [ -n "$CI_COMMIT_TAG" ]; then docker tag minizinc_ubuntu minizinc/minizinc:ubuntu_$CI_COMMIT_TAG && docker push minizinc/minizinc:ubuntu_$CI_COMMIT_TAG; fi
254
+ - if [ "$CI_COMMIT_REF_NAME" = "master" ]; then docker tag minizinc_ubuntu minizinc/minizinc:ubuntu_latest && docker push minizinc/minizinc:ubuntu_latest; fi
255
+ - if [ "$CI_COMMIT_REF_NAME" = "develop" ]; then docker tag minizinc_ubuntu minizinc/minizinc:ubuntu_edge && docker push minizinc/minizinc:ubuntu_edge; fi
256
+ dependencies : []
257
+ only : [tags, master, develop]
258
+ tags : [docker-cli]
259
+
260
+ package:snap :
261
+ stage : package
262
+ image : dekker1/minibuild:snap
263
+ variables :
264
+ MZNARCH : " linux"
265
+ DOWNLOAD_GLOBALIZER : 1
266
+ DOWNLOAD_FINDMUS : 1
267
+ << : *packaging_setup
268
+ script :
269
+ - strip minizinc/bin/minizinc vendor/gecode/bin/fzn-gecode vendor/chuffed/bin/fzn-chuffed findMUS/bin/findMUS globalizer/bin/minizinc-globalizer minizinc/bin/mzn2doc
270
+ - cp resources/pkg_config/snapcraft.yaml .
271
+ - echo "$MZNVERSION" > version.txt
272
+ - apt-get update -y
273
+ - snapcraft
274
+ - echo "$SNAPLOGIN" > login.pass
275
+ - snapcraft login --with login.pass
276
+ - snapcraft push --release=edge minizinc*.snap
277
+ artifacts :
278
+ name : " minizinc_snap_${CI_PIPELINE_ID}"
279
+ paths : [minizinc*.snap]
280
+ dependencies : []
281
+ only : [tags, develop]
282
+ tags : [linux, docker]
0 commit comments