blog: Move a blog to drafts, publish gpgme/python blog
[gnupg-doc.git] / misc / blog.gnupg.org / upload
1 #!/bin/sh
2
3 set -e
4
5 opt_upload=yes
6 if [ x"$1" = x"--no-upload" ]; then
7   opt_upload=no
8 fi
9
10
11 if [ "$(pwd  | awk -F/ '{print $NF}')" != "blog.gnupg.org" ]; then
12   echo "upload: not invoked from the blog.gnupg.org directory" >&2;
13   exit 1
14 fi
15
16 echo "upload: Rendering entries" >&2
17 # We need to initialize that org cache to use our own publish function
18 # despite that we do not use any org-publish feature
19 emacs23 --batch \
20   --eval "(require 'assoc)" \
21   --eval "(require 'org)" \
22   --eval "(setq gpgweb-root-dir \"$(cd ../../web && pwd)/\")" \
23   --eval "(setq gpgweb-stage-dir \"$(cd ../../stage && pwd)/\")" \
24   --eval "(require 'gpgweb (concat gpgweb-root-dir \"share/gpgweb.el\"))" \
25   --eval "(setq org-publish-use-timestamps-flag nil)" \
26   --eval "(setq org-export-html-toplevel-hlevel 1)" \
27   --eval "(setq org-export-html-coding-system 'utf-8)" \
28   --eval "(gpgweb-setup-project)" \
29   --eval "(org-publish-initialize-cache \"gpgweb\")" \
30   --eval "(gpgweb-publish-blogs)"
31
32 if [ ! -f index.html ]; then
33   echo "upload: index.html has not yet been build" >&2;
34   exit 1
35 fi
36
37 # Find all rendered HTML files but skip possible translated versions.
38 find . -maxdepth 1 -type f -name "20*.html" -print \
39     | grep -v '\.[a-z][a-z].html$' | sort -r >index.tmp
40 newest=$(head -1 index.tmp)
41
42 # Extract the head lines
43 : >index.headlines.tmp
44 cat index.tmp | while read fname; do
45   echo -n "${fname#./}|" >>index.headlines.tmp
46   sed  -n '/^<h2 id=/ {s,^<[^>]*>\(.*\)</h2>,\1,p;q}' \
47        $fname >>index.headlines.tmp
48 done
49
50 # Update the index file
51 echo "upload: Updating index.html" >&2
52 awk -F:  <index.html  >index.tmp \
53     -v newest=${newest#./} '
54      /<!--BEGIN-NEWEST-ENTRY-->/ {indon=1; print; insertnewest() }
55      /<!--END-NEWEST-ENTRY-->/ {indon=0}
56      /<!--BEGIN-BLOG-INDEX-->/ {indon=1; print; insertindex() }
57      /<!--END-BLOG-INDEX-->/   {indon=0}
58      !indon { print }
59
60      function insertnewest () {
61        inblog = 0
62        while (getline < newest) {
63          if (match ($0, /^<main>/))  { inblog = 1; continue; }
64          if (match ($0, /^<\/main>/)) { inblog = 0; break; }
65          if (! inblog) { continue }
66          if (match ($0, /^<div id="content">/)) { continue; }
67          if (match ($0, /^<\/div><!-- end content -->/)) { continue; }
68          print $0
69        }
70       close(newest)
71      }
72
73      function insertindex (tag) {
74        file = "index.headlines.tmp";
75        print "<ul>"
76        while (getline < file) {
77          split($0, a, "|")
78          printf "  <li><a href=\"%s\">%s</a>\n", a[1], a[2];
79        }
80        print "</ul>"
81        close (file)
82      }
83      '
84 mv index.tmp index.html || echo "upload: error updating index.html" >&2
85
86 # Update the feed file
87 echo "upload: Updating feed file" >&2
88
89
90
91 # Rename headlines file
92 mv index.headlines.tmp headlines.txt
93
94 if [ $opt_upload = yes ]; then
95   echo "upload: Uploading files" >&2
96   rsync -vr --links --exclude '*~' --exclude upload --exclude '*tmp' \
97      --exclude '*.org' \
98      . werner@trithemius.gnupg.org:/var/www/www/www.gnupg.org/misc/blog/
99 fi
100
101 #eof