-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.reb
160 lines (142 loc) · 4.42 KB
/
build.reb
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
Rebol [
Title: "Cheyenne builder"
Encap: [title "Cheyenne builder"]
Description: {
; the build script
build-dir/build.reb
; dependencies
; virtual file-system to be encapped
build-dir/.cache.efs
; SDK tools and sources
sdk
sdk/tools/en*
sdk/tools/license.key
sdk/sources
; generated files
; lists for a limited number of latest build and download file names
build-dir/latest-builds.reb
build-dir/latest-dists.reb
; source repository
repo
; file to be encapped
repo/Cheyenne/cheyenne.r
; virtual file-system to be encapped
repo/Cheyenne/.cache.efs
; rebol sources to include from the SDK
repo/Cheyenne/encap-paths.r
; HTML snippets to be included on http://cheyenne-server.org/download.shtml
www-dir/builds.inc
<li><a href="download-path/cheyenne-linux-afcc99e-pro.gz">cheyenne-linux-afcc99e-pro.gz</a></li>
<li><a href="download-path/cheyenne-linux-afcc99e-cmd.gz">cheyenne-linux-afcc99e-cmd.gz</a></li>
...
www-dir/dists.inc
<li><a href="download-path/cheyenne-afcc99e-pro.gz">cheyenne-afcc99e-pro.gz</a></li>
<li><a href="download-path/cheyenne-afcc99e-cmd.gz">cheyenne-afcc99e-cmd.gz</a></li>
...
; for an alternative reliable source maybe?
<li><a href="https://github.com/dockimbel/cheyenne/archive/master.tar.gz">cheyenne-master.tar.gz</a><li>
<li><a href="https://github.com/dockimbel/cheyenne/archive/master.zip">cheyenne-master.zip</a><li>
; downloads
publish-dir/cheyenne-linux-afcc99e-pro.gz
publish-dir/cheyenne-linux-afcc99e-cmd.gz
publish-dir/cheyenne-afcc99e.tar.gz
publish-dir/cheyenne-afcc99e.zip
; for convenience
publish-dir/cheyenne-linux-latest-pro.gz
publish-dir/cheyenne-linux-latest-cmd.gz
publish-dir/cheyenne-latest.tar.gz
publish-dir/cheyenne-latest.zip
}
]
build-dir: clean-path system/options/path
sdk: build-dir/sdk
repo: build-dir/cheyenne
www-dir: %/home/dk/cheyenne-server.org/
download-path: %dl
publish-dir: www-dir/:download-path
build: does [
make-dir/deep www-dir
make-dir/deep publish-dir
update-source
build-cache.efs
build-encap-paths.r
publish-builds reduce [build-exe pro]
publish-dists reduce [build-dist %.tar.gz build-dist %.zip]
]
update-source: does [
unless dir? repo/.git [ exec git {clone https://github.com/dockimbel/cheyenne/} ]
exec git {pull}
]
exec: funct [params /read] [
params: reform params
either read
[call/wait/output params output: copy "" output]
[call/wait params]
]
git: funct [params] [ reform join [join {GIT_DIR=} repo/.git {git}] params ]
build-cache.efs: does [ in-dir repo/Cheyenne [do/args %cheyenne.r {-e}] ]
build-encap-paths.r: does [
write repo/%Cheyenne/encap-paths.r
map-each file [mezz.r prot.r gfx-colors.r]
[ rejoin [{#include %} clean-path sdk/source/:file newline] ]
]
publish-builds: funct [builds] [
write www-dir/builds.inc
build-inc download-path
queue build-dir/latest-builds.reb builds 5 * 2 ; 5 pairs of pro and cmd builds
]
build-inc: funct [download-path files] [
ajoin map-each file files [ li-a download-path/:file file ]
]
li-a: funct [href txt] [
ajoin [<li> build-tag[a href (href)] txt </a> </li> newline]
]
queue: funct [q files limit] [
past-files: any [ attempt [load q] [ ] ]
new-files: push/limit past-files files limit
obsolete-files: copy/part new-files head new-files
save q new-files
foreach build obsolete-files [ delete build ]
new-files
]
push: funct [q items /limit size] [
skip tail union q items negate size
]
build-exe: funct ['encapper] [
exe: exe-name :encapper
exec encap publish-dir/:exe :encapper
exe
]
make-timestamp: does [
rejoin [
either now/day < 10 [join "0" now/day][now/day]
lowercase copy/part pick system/locale/months now/month 3
now/year - 2000
]
]
exe-name: funct ['encapper] [ rejoin [%cheyenne-linux- ver %- :encapper] ]
ver: does [
ver: rejoin [
make-timestamp #"-"
trim/lines exec/read git {rev-parse --short HEAD}
]
]
encap: funct [exe 'encapper] [
reduce [
to-local-file sdk/tools/(join {en} :encapper)
"-o" exe
repo/Cheyenne/cheyenne.r
]
]
publish-dists: funct [dists] [
write www-dir/dists.inc
build-inc download-path
queue build-dir/latest-dists.reb dists 5 * 2 ; 5 pairs of .tar.gz and .zip sources
]
build-dist: funct [ext] [
dist-file: join dist-name ext
exec git [{archive -o} publish-dir/:dist-file {HEAD}]
dist-file
]
dist-name: funct [] [ rejoin [%cheyenne- ver] ]
build