OILS / web / publish.sh View on Github | oilshell.org

187 lines, 109 significant
1#!/usr/bin/env bash
2#
3# Temporarily publish test results under versioned directories.
4#
5# Usage:
6# ./publish.sh <function name>
7#
8# Use cases:
9# - Blogging
10# - Shared debugging
11# - Running tests on machines without a web server.
12#
13# Releases publish HTML the oilshell.org__deploy repo, but here we publish
14# directly to web servers.
15
16set -o nounset
17set -o pipefail
18set -o errexit
19
20readonly HOST='oilshell.org'
21
22log() {
23 echo "$@" 1>&2
24}
25
26current-branch-name() {
27 git rev-parse --abbrev-ref HEAD
28}
29
30versioned-dest() {
31 local branch=$(current-branch-name)
32 log "branch $branch"
33 local hash=$(git rev-parse $branch)
34 local short_hash=${hash:0:8}
35 log "hash $short_hash"
36
37 local dest="oilshell.org/git-branch/$branch/$short_hash"
38 echo $dest
39}
40
41share-dir-versioned() {
42 local dir=$1
43 local user=$2
44 local host=oilshell.org
45
46 local dest
47 dest="$(versioned-dest)/$(basename $dir)"
48
49 ssh $user@$host mkdir -p $dest
50
51 # rsync is faster than scp and has the --no-target-directory behavior.
52 # We need --copy-links because the CSS files are symlinks.
53 rsync --archive --verbose --copy-links \
54 "$dir/" "$user@$host:$dest/"
55
56 echo "Visit http://$dest/"
57}
58
59spec() {
60 ### Publish spec tests to a versioned directory on a web server
61
62 local user=$1
63 share-dir-versioned _tmp/spec $user
64}
65
66benchmarks-perf() {
67 ### Identical to above, except for the directory
68
69 local user=$1
70 share-dir-versioned _tmp/perf $user
71}
72
73benchmark() {
74 ### Publish benchmarks to a versioned dir
75
76 local user=$1
77 local benchmark=${2:-osh-parser}
78
79 local dest
80 # Add hostname because spec tests aren't hermetic yet.
81 #dest="$(versioned-dest)/$(hostname)/spec"
82 dest="$(versioned-dest)/$benchmark"
83
84 echo $dest
85
86 ssh $user@$HOST mkdir -p $dest
87
88 scp _tmp/$benchmark/index.html $user@$HOST:$dest/
89
90 echo "Visit http://$dest/"
91}
92
93compress-wild() {
94 local out="$PWD/_tmp/wild/wild.wwz"
95 pushd _tmp/wild-www
96 time zip -r -q $out . # recursive, quiet
97 ls -l $out
98}
99
100# NOTE: Have to copy the web/ dir too? For testing, use ./local.sh
101# test-release-tree.
102wild() {
103 local user=$1
104 local host=${2:-${user}.org} # default host looks like the name
105
106 local dest
107 dest="$(versioned-dest)" # no wild/ suffix, since it's wild.wwz/
108
109 ssh $user@$host mkdir -p $dest
110
111 rsync --archive --verbose \
112 _tmp/wild/wild.wwz $user@$host:$dest/
113
114 echo "Visit http://$dest/wild.wwz/"
115}
116
117web-dir() {
118 local user=$1
119 local dest=$2
120
121 # This is made by copy-web in devtools/release.sh. Reuse it here.
122 rsync --archive --verbose \
123 _release/VERSION/web/ $dest
124
125 echo "Published to $dest"
126}
127
128web-dir-versioned() {
129 ### Publish static assets needed for the wild HTML pages (versioned)
130 local user=$1
131 local host=oilshell.org
132
133 local branch=$(current-branch-name)
134 local dir=oilshell.org/git-branch/$branch/web/
135
136 local dest=$user@$host:$dir
137
138 ssh $user@$host mkdir --verbose -p $dir
139 web-dir $user $dest
140}
141
142web-dir-preview() {
143 ### Publish static assets needed for the wild HTML pages.
144 local user=$1
145 local host=oilshell.org
146
147 local dir='oilshell.org/preview/web'
148
149 ssh $user@$host mkdir --verbose -p $dir
150
151 local dest=$user@$host:$dir
152 web-dir $user $dest
153}
154
155doc-preview() {
156 ### Publish a file (e.g. _release/VERSION/doc/json.html) to
157 local user=$1
158 local host=oilshell.org
159
160 local path=$2
161 local dest=${3:-'oilshell.org/preview/doc'}
162
163 ssh $user@$host mkdir --verbose -p $dest
164 scp $path $user@$host:$dest
165}
166
167mycpp-benchmarks() {
168 doc-preview $1 _tmp/mycpp-benchmarks/index.html oilshell.org/preview/benchmarks/mycpp
169}
170
171shell-vs-shell() {
172 doc-preview $1 _tmp/shell-vs-shell/index.html oilshell.org/preview/shell-vs-shell
173}
174
175file-to-share() {
176 local user=$1
177 local host=oilshell.org
178
179 local file=$2
180 local dest_suffix=${3:-} # e.g. .txt
181
182 local dest=$user@$host:oilshell.org/share/$(basename $file)$dest_suffix
183
184 scp $file $dest
185}
186
187"$@"