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
|
# https://taskfile.dev
#Called by the vnbuild system to produce builds for my website
#https://www.vaughnnugent.com/resources/software
version: "3"
vars:
BUILDS_URL: https://www.vaughnnugent.com/public/resources/software/builds
SQLITE_OUT_DIR: "plugins/assets/VNLib.Plugins.Extensions.Loading.Sql.SQLite"
WEBSERVER_VERSION: 'a04d0118b671dfc647647d4c425172013011e401'
includes:
install:
taskfile: install.taskfile.yaml
plugins:
taskfile: plugins.taskfile.yaml
container:
dir: container #always run from the container directory
taskfile: container/Taskfile.yaml
vars:
BUILDS_URL: '{{.BUILDS_URL}}'
PACKAGE_FILE_NAME: "sb-alpine3.19-oci.tgz" #the name of the output package file
tasks:
build:
cmds:
#clean out dist dir before building
- cmd: powershell -Command "rm -Recurse -Force ./dist"
ignore_error: true
- cmd: powershell -Command "mkdir lib -Force"
ignore_error: true
- task: plugins:all
#remove runtime-shared libs before they are copied
- task: prune-plugin-libs
- task: install-webserver
#runtimes must be pruned for specific targets
- task: prune-runtimes
#run container build last
- task: container:build
install-webserver:
cmds:
- cmd : powershell -Command "mkdir webserver -Force"
ignore_error: true
#clone the webserver (it's cross platform when using dotnet command so just grab the linux version)
- task: install:install
vars:
PROJECT_NAME: 'VNLib.Webserver'
MODULE_NAME: "VNLib.Webserver"
FILE_NAME: "linux-x64-release.tgz"
DIR: 'webserver/'
VERSION: '{{.WEBSERVER_VERSION}}'
#remove the executable since its not needed
- cmd: cd webserver/ && powershell -Command "rm VNlib.WebServer"
- task: parallel-envs
parallel-envs:
deps:
- task: create-env
vars: { TARGET_OS: 'windows-x86_64' }
- task: create-env
vars: { TARGET_OS: 'linux-x86_64' }
- task: create-env
vars: { TARGET_OS: 'osx-x86_64' }
- task: create-env
vars: { TARGET_OS: 'windows-arm' }
- task: create-env
vars: { TARGET_OS: 'linux-arm' }
- task: create-env
vars: { TARGET_OS: 'osx-arm' }
postbuild_success:
cmds:
- cmd: powershell -Command "mkdir bin -Force"
- task: pb-parallel
#cleanup unnecessary build files that clog up the pipeline
- for: [ build, plugins, dist, lib, webserver ]
cmd: powershell -Command "rm -Recurse '{{.ITEM}}'"
ignore_error: true
- task: container:postbuild_success
pb-parallel:
internal: true
deps:
- task: pack
vars: { TARGET_OS: 'windows-x86_64' }
- task: pack
vars: { TARGET_OS: 'linux-x86_64' }
- task: pack
vars: { TARGET_OS: 'osx-x86_64' }
- task: pack
vars: { TARGET_OS: 'windows-arm' }
- task: pack
vars: { TARGET_OS: 'linux-arm' }
- task: pack
vars: { TARGET_OS: 'osx-arm' }
cmds:
- echo "Packing complete"
create-env:
vars:
BUILD_DIR: './build/{{.TARGET_OS}}'
cmds:
#create dir for env
- cmd: powershell -Command "mkdir {{.BUILD_DIR}} -Force"
ignore_error: true
#copy build files for target os
- for: [ plugins, dist, lib, config, webserver ]
cmd: powershell -Command "cp -Recurse -Force {{.ITEM}} {{.BUILD_DIR}}"
#copy release taskfile and rename it
- cmd: powershell -Command "cp -Force release.taskfile.yaml {{.BUILD_DIR}}/Taskfile.yaml"
pack:
internal: true
cmds:
- cmd: powershell -Command "mkdir build/{{.TARGET_OS}}/ -Force"
ignore_error: true
- cd build/{{.TARGET_OS}} && tar -czf ../../bin/{{.TARGET_OS}}-release.tgz .
prune-plugin-libs:
cmds:
- for: ['vnlib.utils.dll' , 'vnlib.net.http.dll', 'VNLib.Hashing.Portable.dll', 'VNLib.Plugins.Essentials.dll', 'VNLib.Plugins.dll', 'Serilog.dll', 'Serilog.Sinks.Console.dll', 'Serilog.Sinks.File.dll']
cmd: cd plugins && powershell 'Get-ChildItem -Path . -Recurse -File -Filter "{{.ITEM}}" | Remove-Item -Force'
prune-runtimes:
deps:
#prune sqlite runtime native libraries that Im not targeting
#windows
- task: prune-files
vars:
ITEMS: 'browser-wasm,linux-arm,linux-arm64,linux-armel,linux-mips64,linux-musl-arm,linux-musl-arm64,linux-musl-x64,linux-ppc64le,linux-s390x,linux-x64,linux-x86,maccatalyst-arm64,maccatalyst-x64,osx-arm64,osx-x64,win-arm,win-arm64'
DIR: 'windows-x86_64'
#windows arm
- task: prune-files
vars:
ITEMS: 'browser-wasm,linux-arm,linux-arm64,linux-armel,linux-mips64,linux-musl-arm,linux-musl-arm64,linux-musl-x64,linux-ppc64le,linux-s390x,linux-x64,linux-x86,maccatalyst-arm64,maccatalyst-x64,osx-arm64,osx-x64,win-x86,win-x64'
DIR: 'windows-arm'
#linux x64
- task: prune-files
vars:
ITEMS: 'browser-wasm,linux-arm,linux-arm64,linux-armel,linux-musl-arm,linux-musl-arm64,maccatalyst-arm64,maccatalyst-x64,osx-arm64,osx-x64,win-arm,win-arm64,win-x86,win-x64'
DIR: 'linux-x86_64'
#linux arm
- task: prune-files
vars:
ITEMS: 'browser-wasm,linux-mips64,linux-musl-x64,linux-ppc64le,linux-s390x,linux-x64,linux-x86,maccatalyst-arm64,maccatalyst-x64,osx-arm64,osx-x64,win-arm,win-arm64,win-x86,win-x64'
DIR: 'linux-arm'
#osx x64
- task: prune-files
vars:
ITEMS: 'browser-wasm,linux-arm,linux-arm64,linux-armel,linux-mips64,linux-musl-arm,linux-musl-arm64,linux-musl-x64,linux-ppc64le,linux-s390x,linux-x64,linux-x86,maccatalyst-arm64,win-arm,win-arm64,win-x86,win-x64'
DIR: 'osx-x86_64'
#osx arm
- task: prune-files
vars:
ITEMS: 'browser-wasm,linux-arm,linux-arm64,linux-armel,linux-mips64,linux-musl-arm,linux-musl-arm64,linux-musl-x64,linux-ppc64le,linux-s390x,linux-x64,linux-x86,maccatalyst-x64,osx-x64,win-arm,win-arm64,win-x86,win-x64'
DIR: 'osx-arm'
cmds:
- echo "Pruning runtime files"
prune-files:
internal: true
cmds:
- for: { var: ITEMS, split: ','}
cmd: cd build/{{.DIR}}/{{.SQLITE_OUT_DIR}}/runtimes && powershell -Command "rm {{.ITEM}} -Recurse -Force"
ignore_error: true
clean:
ignore_error: true
cmds:
- for: [ build/, bin/, dist/, plugins/, lib/, webserver/ ]
cmd: powershell -Command "rm -Recurse -Force '{{.ITEM}}'"
- task: container:clean
|